#897
Easy Algorithms Increasing order search tree
Stack Tree Depth-First Search Binary Search Tree Binary Tree
78.9% acceptance
Feb 27, 2026
4477
685
Given the root of a binary search tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root of the tree, and every node has no left child and only one right child.
Solution
Rust
Time O(n)
Space O(n)
/*
* Given the root of a binary search tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root of the tree, and every node has no left child and only one right child.
* Example 1:
* Input: root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
* Output: [1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
* Example 2:
* Input: root = [5,1,7]
* Output: [1,null,5,null,7]
* Constraints:
* The number of nodes in the given tree will be in the range [1, 100].
* 0 <= Node.val <= 1000
*/
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
fn inorder(node: &Option<Rc<RefCell<TreeNode>>>, result: &mut Vec<i32>) {
if let Some(n) = node {
let n = n.borrow();
Self::inorder(&n.left, result);
result.push(n.val);
Self::inorder(&n.right, result);
}
}
pub fn increasing_bst(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
let mut vals = Vec::new();
Self::inorder(&root, &mut vals);
let dummy = Rc::new(RefCell::new(TreeNode::new(0)));
let mut cur = dummy.clone();
for v in vals {
let next = Rc::new(RefCell::new(TreeNode::new(v)));
cur.borrow_mut().right = Some(next.clone());
cur = next;
}
dummy.borrow().right.clone()
}
}