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
这道题仔细想想其实是inorder traversal,只不过不同的是顺序变成了右中左,然后记录之前所有node的总和。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode convertBST(TreeNode root) {
if(root == null)
return null;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root;
while(p != null) {
stack.push(p);
p = p.right;
}
int last = 0;
while(stack.size() > 0) {
TreeNode temp = stack.pop();
temp.val = temp.val + last;
last = temp.val;
System.out.println(last);
if(temp.left != null) {
p = temp.left;
while(p != null) {
stack.push(p);
p = p.right;
}
}
}
return root;
}
}
或者也可以递归
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int sum = 0;
public TreeNode convertBST(TreeNode root) {
if(root == null)
return null;
convertBST(root.right);
sum += root.val;
root.val = sum;
convertBST(root.left);
return root;
}
}