LeetCode/538. 把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树

给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。

例如:

输入: 原始二叉搜索树:
              5
            /   \
           2     13

输出: 转换为累加树:
             18
            /   \
          20     13

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

本题官方的反中序遍历方法确实很厉害,但是也不是那么的高不可攀。我们一看到题目,最原始的想法就是,右边比左边大,那么就应该先把右子树处理完,然后得到一个累加值,然后再处理左子树各个节点,其实这就是中序遍历逆过来遍历。

具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
int sum = 0;

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

Comments