题目如下:
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
解答如下:
这一题其实不难,但是我被树的思维限制住了。总觉的要在树里去处理这个问题,其实完全可以把Node先序遍历到一个列表里,然后直接改变值就好。这个思路非常好。记下来。
class Solution {
ArrayList<TreeNode> a=new ArrayList<TreeNode>();
public void PreorderTraversal(TreeNode root){
if(root.left!=null) PreorderTraversal(root.left);
a.add(root);
if(root.right!=null) PreorderTraversal(root.right);
}
public TreeNode convertBST(TreeNode root) {
if(root==null||(root.left==null&&root.right==null)) return root;
PreorderTraversal(root);
int len=a.size();
int sum=a.get(len-1).val;
for(int i=len-2;i>=0;i--){
int val=a.get(i).val;
a.get(i).val+=sum;
sum+=val;
}
return root;
}
}