538. Convert BST to Greater Tree 538.将BST转换为更大的树

Posted immiao0319

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了538. Convert BST to Greater Tree 538.将BST转换为更大的树相关的知识,希望对你有一定的参考价值。

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

Example:

Input: The root of a Binary Search Tree like this:
              5
            /              2     13

Output: The root of a Greater Tree like this:
             18
            /             20     13

思路问题:

helper中序递增,什么也不做,就返回一个数组。
然后主函数里面不就是最一般的情况了吗?大于等于它的就加上。
那这样,主函数里面就要再遍历一遍

新的思路:helper中序里面可以直接加、做一些别的处理。似乎更合理。
主函数就不用遍历两次了。


没加的值为sum = 13 sum = root.val; 13 
加和后的值为root.val = 26.root.val += sum;两个13相加了。
root.val本来就有值,此时同一个值加了两次,被自己覆盖了。反正不能加新值就对了。
赋值后再加新值,等于加了两次
没加的值为sum = 5
加和后的值为root.val = 10
没加的值为sum = 2
加和后的值为root.val = 4
这么写有bug
加和后的值为root.val =  root.val += sum;就是本身,root本身没有值
没加的值为sum = 13
加和后的值为root.val = 18 5加上了13
没加的值为sum = 18 
加和后的值为root.val = 20
没加的值为sum = 20
写是这么写,初始化是从sum开始的。第一步并没有加。
这么写没bug
相加后再赋值,等于只了加一次

 

特殊情况必须先写上,实在是怕忘。其实提醒自己一下也不难对吧。

技术图片
class Solution {
    int sum = 0;
    
    public TreeNode convertBST(TreeNode root) {
        //特殊情况必须先写上,实在是怕忘
        if (root == null) 
            return null;
        
        convertBST(root.right);
        
        root.val += sum;
        sum = root.val;
        
        convertBST(root.left);
        
        return root;
    }
}
View Code

 

以上是关于538. Convert BST to Greater Tree 538.将BST转换为更大的树的主要内容,如果未能解决你的问题,请参考以下文章

538. Convert BST to Greater Tree

538. Convert BST to Greater Tree

538. Convert BST to Greater Tree

538. Convert BST to Greater Tree

Leetcode 538. Convert BST to Greater Tree

[LeetCode] 538. Convert BST to Greater Tree