Skip to main content
Back to problems
#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)
LeetCode
solution.rs
/*
 * 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()
  }
}