给定一个二叉排序树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
样例
样例 1:
输入:root = {5,3,6,2,4,#,8,1,#,#,#,7,9}
5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9
输出:{1,#,2,#,3,#,4,#,5,#,6,#,7,#,8,#,9}
解释:
1
\
2
\
3
\
4
\
5
\
6
\
7
\
8
\
9
样例 2:
输入: root = {8,3,10,1,6,#,14,#,#,4,7,13,#}
8
/ \
3 10
/ \ \
1 6 14
/ \ /
4 7 13
输出: {1,#,3,#,4,#,6,#,7,#,8,#,10,#,13,#,14}
解释:
1
\
3
\
4
\
6
\
7
\
8
\
10
\
13
\
14
注意事项
给定树中的结点数介于 1 和 100 之间。
每个结点都有一个从 0 到 1000 范围内的唯一整数值。
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: a binary search tree
* @return: Root of a tree
*/
TreeNode * increasingBST(TreeNode * root) {
// Write your code here.
TreeNode*newroot=new TreeNode(0);
TreeNode*res=newroot;
vector<int> tmp;
recursion(root,tmp);
for (int i = 0; i < tmp.size(); i++) {
/* code */
res->right=new TreeNode(tmp[i]);
res->left=NULL;
res=res->right;
}
return newroot->right;
}
void recursion(TreeNode*root, std::vector<int> &tmp)
{
if(root==NULL) return ;
recursion(root->left,tmp);
tmp.push_back(root->val);
recursion(root->right,tmp);
}
};
来源:CSDN
作者:Sinb妃
链接:https://blog.csdn.net/weixin_43981315/article/details/103994636