累加树(leetcode538)

文章介绍了如何将二叉搜索树转换为累加树,关键在于进行反中序遍历,即右-中-左,过程中累加前置节点值。给定示例展示了从2,5,13的二叉搜索树转换为18,20,13的累加树的过程。解决方案中定义了一个`pre`变量来存储前置节点的值,并提供了一个`traversal`方法实现遍历和累加。
摘要由CSDN通过智能技术生成

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

该开始看这道题可能看的感觉云里雾里的,不知道题目在说什么。但其实就是将树的中序遍历列出来,然后从后往前累加,再填回树中。

如:一个二叉搜索树:5,2,13.其中序遍历为:2,5,13.累加过后的中序为:20,18,13。再填回树中:18,20,13。

因为是中序从后往前累加,所以遍历顺序就变成了:右,中,左。是一个反中序遍历。这样思考的话,本题就变简单了

class Solution {
    int pre = 0;//需要一个前置节点记录数值,方便累加
    public TreeNode convertBST(TreeNode root) {
        //中序遍历,然后从后往前累加即可
        //用右,中,左的反中序遍历
        traversal(root);
        return root;
    }
    public void traversal(TreeNode root) {
        if (root == null) return ;
        //右
        traversal(root.right);
        //中
        root.val+=pre;
        pre = root.val;
        //左
        traversal(root.left);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值