https://leetcode-cn.com/problems/increasing-order-search-tree/
思路:最简单的方法就是用数组存储中序遍历的结果,再按照要求重建。这种做法没什么意思,我们看一下原地修改的算法。我们可以用
p
r
e
pre
pre记录中序遍历中当前节点的上一节点,在处理完左子树后,
p
r
e
pre
pre指向左子树的最右节点,需要令
p
r
e
.
r
i
g
h
t
=
c
u
r
,
c
u
r
.
l
e
f
t
=
n
u
l
l
pre.right=cur,cur.left=null
pre.right=cur,cur.left=null,然后令
p
r
e
=
c
u
r
pre=cur
pre=cur,处理右子树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode *pre;
void preorder(TreeNode* cur)
{
if(cur)
{
preorder(cur->left);
pre->right=cur;
cur->left=nullptr;
pre=cur;
preorder(cur->right);
}
}
TreeNode* increasingBST(TreeNode* root) {
TreeNode myhead;
pre=&myhead;
preorder(root);
return myhead.right;
}
};