由于二叉搜索树的性质,中序遍历就可以得到有序序列s[0,1,…,n],而new[n]=s[n],new[n-1]=new[n]+s[n-1],…new[0]=new[1]+s[0].此处正好可以用栈来装。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* convertBST(TreeNode* root) {
if(!root) return NULL;
stack<TreeNode*> stk=inorderTraversal(root);
int value=0;
while(!stk.empty()){
value+=stk.top()->val;
stk.top()->val=value;
stk.pop();
}
return root;
}
stack<TreeNode*> inorderTraversal(TreeNode* root) {
stack<TreeNode*> res,stack;
TreeNode* cur = root;
while(cur || !stack.empty()){
while(cur){
stack.push(cur);
cur=cur->left;
}
cur = stack.top();
stack.pop();
res.push(cur);
cur=cur->right;
}
return res;
}
};