题目描述:
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.
样例:
Given a binary search Tree `{5,2,3}`:
5
/ \
2 13
Return the root of new tree
18
/ \
20 13
做题思路:
利用自身函数的递归调用,从右子树开始,用遍历右根左的方法,赋值给sum加和,更新sum,再把sum赋值给根节点,更新根节点的值,根节点与左子树上的节点,根据遍历和递归,依次改变值,并返回该树的根节点。
关键代码:
class Solution {
public:
/**
* @param root the root of binary tree
* @return the new root
*/
int sum=0;
TreeNode* convertBST(TreeNode* root) {
// Write your code here
if(root==NULL) return NULL;
convertBST(root->right);
root->val+=sum;
sum=root->val;
convertBST(root->left);
return root;
}
};
做题感想:这题想了好久,想出了好几种思路,但是会想不会写代码,所以上网搜了搜,这种算法便于看懂,更简洁。利用自身函数递归调用,来完成算法实现。