Leetcode-897-递增顺序查找树

Leetcode-897-递增顺序查找树

题目描述

给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

示例 :

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

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

输出:[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  

思路:中序遍历 + 构造新树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode increasingBST(TreeNode root) {
List<Integer> vals = new ArrayList<>();
inorder(root,vals);

// 构造新树
TreeNode ans = new TreeNode(0);
TreeNode cur = ans;
for(int val:vals){
cur.right = new TreeNode(val); // 构造新的结点
cur = cur.right; // 方向只向右延伸
}
return ans.right;
}

// 中序遍历
public void inorder(TreeNode node,List<Integer> vals){
if(node == null) return;
inorder(node.left,vals);
vals.add(node.val);
inorder(node.right,vals);
}
}

复杂度分析

  • 时间复杂度:O(N),其中 N 是树上的节点个数。
  • 空间复杂度:O(N)。
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信