题目描述:
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.
Example:
Input: The root of a Binary Search Tree like this: 5 / \ 2 13 Output: The root of a Greater Tree like this: 18 / \ 20 13
将二叉搜索树改为较大树,较大树对定义是对任意节点把树中所有大于它的节点的值都加到它本身。考虑到BST的特性,采用递归,从大到小遍历二叉树的节点,并计算累积和,那么每次遍历到一个节点,就更新节点的值以及累积和。
class Solution {
public:
TreeNode* convertBST(TreeNode* root) {
int sum=0;
return converseBST_withSum(root,sum);
}
TreeNode* converseBST_withSum(TreeNode* root, int& sum){
if(root==NULL) return NULL;
if(root->right!=NULL)
{
root->right=converseBST_withSum(root->right, sum);
}
root->val+=sum;
sum=root->val;
if(root->left!=NULL)
{
root->left=converseBST_withSum(root->left, sum);
}
return root;
}
};