描述:
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
思路:
采用递归,每个节点的值等于右节点的值加自身的值,左节点的值等于右节点加根节点的值。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root the root of binary tree
* @return the new root
*/
public TreeNode convertBST(TreeNode root) {
// Write your code here
if(root == null){
return root;
}
int temp = search(root , 0);
return root;
}
public int search(TreeNode root , int count){
if(root == null){
return 0;
}
int right = search(root.right , count);
int left = search(root.left , count + root.val + right);
int result = right + left + root.val;
root.val += right + count;
return result;
}
}