题目概述:
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
代码如下:
**
* 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* increasingBST(TreeNode* root) {
return solve(root,NULL);
}
TreeNode* solve(TreeNode* root,TreeNode* tail){
if(!root)return NULL;
auto right=solve(root->right,tail);
if(!right)right=tail;
auto left=solve(root->left,root);
if(!left)left=root;
root->right=right,root->left=NULL;
return left;
}
};