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

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

题目:

思路:

刚开始看了好几遍都没读懂题,后来终于明白了,就比如求第6个结点的新val,首先找到大于等于6的值即6、7、8,所以第6个结点的新val = 6+7+8 = 21。

上面就是二叉搜索树变为累加树的规则,至于解题思路还是老样子:对结点的操作是啥,遍历顺序是啥。

对于结点的操作就是找比他大的累加,但是找这个过程太麻烦了,不要忘记二叉搜索树的重要性质—中序遍历是升序,所以人家已经排列好了,不用你去找,负责累加就好。但是他是升序啊,我是找比我大的累加,那肯定是降序方便啊,所以我要把他变为降序的,变为降序也非常容易,只要把递归顺序改一下,现在的是左中右,改为右中左就变为降序了。好了现在遍历顺序和怎么操作都有了,就干吧。

代码:

class Solution {
public:
    TreeNode* convertBST(TreeNode* root) {
        if(root == NULL){
            return root;
        }
        // 记录累加和
        int sum = 0;
        inorder(root,sum);
        return root;
    }
    
    void inorder(TreeNode* root, int& sum){
        if(root == NULL){
            return ;
        }
        /**降序的中序遍历**/
        inorder(root->right,sum);       // 右
        // 更新累加和
        sum += root -> val;
        // 将BST转换为累加树
        root -> val = sum;
        inorder(root->left,sum);        // 左
    }
};

Rank:

Tips:

太菜了,没想出来好的内存优化,不过也有的时候会达到80%多,不懂,rookie。

posted @ 2021-03-22 15:34  Originhhh  阅读(68)  评论(0)    收藏  举报