当前位置 : 首页 » 文章分类 :  算法  »  LeetCode.897.Increasing Order Search Tree BST转升序单边树

LeetCode.897.Increasing Order Search Tree BST转升序单边树

题目描述

897 Increasing Order Search Tree
https://leetcode-cn.com/problems/increasing-order-search-tree/

Given 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 1 right child.

Example 1:

Input: [5,3,6,2,4,null,8,1,null,null,null,7,9]

       5
      / \
    3    6
   / \    \
  2   4    8
 /        / \
1        7   9

Output: [1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]

 1
  \
   2
    \
     3
      \
       4
        \
         5
          \
           6
            \
             7
              \
               8
                \
                 9

Note:
The number of nodes in the given tree will be between 1 and 100.
Each node will have a unique integer value from 0 to 1000.


解题过程

我用了一种 InPlace 就地组装的方法
递归函数 postOrder() 返回root转换成的单边树的跟
对于 root ,分别对其左右子树调用 postOrder() ,然后把 root 接到 left 的最右叶子上,把 right 接到 root 的右子树上即可。

时间复杂度 O(n),空间复杂度 O(n)

private static class SolutionV2020 {
    public TreeNode increasingBST(TreeNode root) {
        if (null == root) {
            return null;
        }
        return postOrder(root);
    }

    // 返回root转换成的单边树的跟
    private TreeNode postOrder(TreeNode root) {
        if (null == root) {
            return null;
        }
        TreeNode left = postOrder(root.left);
        root.right = postOrder(root.right);
        // 注意一定要把left置为null,要不就乱了
        root.left = null;
        if (null != left) {
            // 返回的left是左子树转换成的单边树的跟,沿着根向右走到最右叶子
            TreeNode newRoot = left;
            while (null != left.right) {
                left = left.right;
            }
            left.right = root;
            return newRoot;
        } else {
            return root;
        }
    }
}

GitHub代码

algorithms/leetcode/leetcode/_897_IncreasingOrderSearchTree.java
https://github.com/masikkk/algorithms/blob/master/leetcode/leetcode/_897_IncreasingOrderSearchTree.java


上一篇 LeetCode.938.Range Sum of BST 二叉搜索树BST的范围和

下一篇 LeetCode.872.Leaf-Similar Trees 叶子序列相同的二叉树

阅读
评论
352
阅读预计1分钟
创建日期 2020-02-02
修改日期 2020-02-02
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论