把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
将中序遍历左-->根-->右的顺序逆过来,变成右-->根-->左的顺序,这样就可以反向计算累加和sum,同时更新结点值。
class Solution {
private int sum = 0;
public TreeNode convertBST(TreeNode root) {
helper(root);
return root;
}
public void helper(TreeNode node){
if(node == null) return;
helper(node.right);
node.val += sum;
sum = node.val;
helper(node.left);
}
}