给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
示例:
输入: 原始二叉搜索树:
5
/ \
2 13输出: 转换为累加树:
18
/ \
20 13
思路 + 代码
其实该题就是让我们将中序遍历反过来,按右—中—左的顺序遍历节点,然后用一个变量来记录上一个更新的节点的新值,以便累加到本节点上。
class Solution {
int lastNodeNewValue = 0;
public TreeNode convertBST(TreeNode root) {
toGreaterTree(root);
return root;
}
public void toGreaterTree(TreeNode node){
if (node == null) return;
toGreaterTree(node.right);
node.val += lastNodeNewValue;
lastNodeNewValue = node.val;
toGreaterTree(node.left);
}
}