leetcode 力扣 538 把二叉搜索树转换为累加树

67 阅读1分钟

反转中序遍历

image.png

算法思路

  • 二叉搜索树的特点是左小右大,而题目的要求是,将当前结点改为,树中大于等于该结点的所有结点的和。
  • 由二叉搜索树的性质不难看出,大于等于当前结点的,不就是它右子树所有结点的和,加上它本身吗?
  • 因此右->中->左的顺序非常合适。

如何设计递归函数

  • 由示例图可以看出,左边的和其实是由右边的和累加而来,我们就可以使用一个全局变量,保存每一步的累加和。而不必每次递归返回一个值,直接在原函数上递归即可。
class Solution {
    int right = 0;

    public TreeNode convertBST(TreeNode root) {
        if (root != null) {
            convertBST(root.right);
            right += root.val;
            node.val = right;
            convertBST(root.left);
        }
        return root;
    }
}