538. Convert BST to Greater Tree
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
题意:
把一个二叉搜索树的每个节点都加上所有节点里面比他大的值,构造成一个更大的二叉搜索树
算法思路:
这里一定要注意二叉搜索树的特点,每个节点的右子树都比节点大,左子树都比节点小
所以每个节点只需要加上他右子树即可
所以这里要先遍历右子树、节点、左子树
把右子树中的内容都放在sum中,依次累加
代码:
package easy;
public class ConvertBSTtoGreaterTree {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
convert(root);
return root;
}
public void convert(TreeNode cur){
if(null == cur) return;
convert(cur.right);
cur.val += sum;
sum = cur.val;
convert(cur.left);
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
}