给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
示例 :
输入:[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 和 100 之间。
每个结点都有一个从 0 到 1000 范围内的唯一整数值。
solution:
1 /**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10 class Solution {
11 public:
12 TreeNode* increasingBST(TreeNode* root) {
13 vector<int> vec;
14 inOrder(root,vec);
15 int size = vec.size();
16 TreeNode* p = root;
17 for(int i = 0;i<size;i++)
18 {
19 TreeNode*node = new TreeNode(vec[i]);
20 p->right = node;
21 p = p->right;
22 }
23 return root->right;
24
25 }
26 void inOrder(TreeNode* root, vector<int>&vec)
27 {
28 if(root)
29 {
30 inOrder(root->left,vec);
31 vec.push_back(root->val);
32 inOrder(root->right,vec);
33 }
34 }
35 };
思路:最水的方法,中序+重新构树。