Given the root of a binary search tree with distinct values, modify it so that every
node
has a new value equal to the sum of the values of the original tree that are greater than or equal to
node.val
.
As a reminder, a binary search tree is a tree that satisfies these constraints:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1:

Input: [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
Note:
- The number of nodes in the tree is between
and1
.100
- Each node will have value between and
.100
- The given tree is a binary search tree.
Solution:
修改二叉樹,使得每個節點的新值為原始樹中大于等于該節點值的和。
1.笨辦法,把每個都拿出來比,找到比它大的取出來。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer> list = new ArrayList<>();
public TreeNode bstToGst(TreeNode root) {
if(root == null) {
return null;
}
travel(root);
Collections.sort(list);
return travel2(root);
}
public TreeNode travel2(TreeNode root) {
if(root != null) {
root.val = calculate(list, root);
}
if(root.left != null) {
travel2(root.left);
}
if(root.right != null) {
travel2(root.right);
}
return root;
}
public int calculate(List<Integer> list, TreeNode root) {
int len = list.size();
int stop=0;
int res=0;
int i = 0;
for(i = 0; i<len; i++) {
if(root.val == list.get(i)) {
break;
}
}
stop=i;
for(int j = stop; j < len; j++) {
res += list.get(j);
}
return res;
}
public void travel(TreeNode root) {
if(root != null) {
list.add(root.val);
}
if(root.left != null) {
travel(root.left);
}
if(root.right != null) {
travel(root.right);
}
}
}