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

题目分析

使用递归中序储存节点至vector中, 后重新构建树.

源码

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
class Solution {
public:
vector<TreeNode*> nodes;
void iterate(TreeNode* root) {
if(root == NULL) { // 如果节点为空则返回
return;
}else { // 节点不为空
iterate(root->left); // 中序遍历左子树储存节点
nodes.push_back(root); // 储存本节点
iterate(root->right); // 中序遍历右子树储存节点
return;
}
}

TreeNode* increasingBST(TreeNode* root) {
iterate(root); //
TreeNode* res = nodes[0];
res->left = NULL;
TreeNode* it = res;
for(int i=1; i<nodes.size(); ++i) {
it->right = nodes[i];
it->left = NULL;
it = it->right;
}
it->left = NULL;
return res;
}
};
0%