- 关键:
- 二叉搜索树的中序遍历是有序的
- 最大的数更新后还是它本身
- 按照节点值降序遍历所有节点,同时记录我们已经遍历过的节点值的和,并把这个和加到当前节点的值中
- 遍历一个没有遍历过的节点之前,先将大于点值的点都遍历一遍
private int sum;
public TreeNode convertBST(TreeNode root) {
midOrder(root);
return root;
}
public void midOrder(TreeNode root) {
if (root == null) return;
midOrder(root.right); //先遍历右子树(右子树的值最大)
sum += root.val;
root.val = sum;
midOrder(root.left);
}