题目
思路
由于需要将所有大于每个节点n
的节点和sum
都加到n
上
考虑用中序遍历的反向顺序:右,中,左
的形式遍历
因为这样当遍历到某个节点时,所有大于该节点的节点都遍历过了,可以收集这些遍历过的节点的和
代码
用全局变量sum
记录所有之前节点的和
遍历到当前节点root
时,将sum
加到root.val
上,再将原始的root.val
加到sum
中
private int sum;
public TreeNode convertBST(TreeNode root) {
process(root);
return root;
}
private void process(TreeNode root) {
if (root == null) {
return;
}
process(root.right);
int originRoot = root.val;
root.val += sum;
sum += originRoot;
process(root.left);
}