leetcode538. Convert BST to Greater Tree

本文介绍了一种特殊BST转换方法,通过中序遍历的反向实现,将二叉搜索树中每个节点的值更新为该节点及其右侧所有节点值之和。文章提供了详细的算法思路及C++代码实现。

https://www.cnblogs.com/grandyang/p/6591526.html

这个题本质上是中序遍历的反向。中序遍历是从小到大,而这个题目是从大到小,然后每个数加上比自己大的所有数的和。

因为实际上并没有改变树的结构,只是改变了原来树中节点的值,所以用void做返回值就可以了。

每次加sum实际上就是加的所有比当前节点大的数的和,并且这个和一定等于前一个节点的更新值。

class Solution {
public:
    TreeNode* convertBST(TreeNode* root) {
        int sum = 0;
        convertCore(root,sum);
        return root;
    }
    void convertCore(TreeNode* root,int &sum){
        if(root == NULL)
            return;
        convertCore(root->right,sum);
        root->val += sum;
        sum = root->val;
        convertCore(root->left,sum);
    }
};

 

转载于:https://www.cnblogs.com/ymjyqsx/p/10483575.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值