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

题目分析:
其实只要看到BST就应该立马想到它的一个重要的性质:其中序遍历序列是非递减的。因此本题目的思路就是:先求树中所有结点值的和sum,然后中序遍历BST,用sum代替之前的结点值,然后更新sum。
请看下面的代码:

class Solution {
public:
    void inorder(TreeNode*root,int &sum){            //中序遍历,将BST转化为累加树,因为sum的值需要不断的变化,因此使用引用
        if(root==NULL){
            return;
        }
        inorder(root->left,sum);                     //递归中序遍历左子树
        int temp=root->val;                     //先保留该节点的值
        root->val=sum;                          //更新该节点的值为sum
        sum-=temp;                              //更新sum的值,减去之前保留的结点的值
        inorder(root->right,sum);               //递归中序遍历右子树。
    }
    void inorderSum(TreeNode*root,int &sum){    //中序遍历对BST求和,sum要使用引用的方式
        if(root==NULL){
            return;           
        }
        inorderSum(root->left,sum);
        sum+=root->val;                   
        inorderSum(root->right,sum);
    }
    TreeNode* convertBST(TreeNode* root) {
        int sum=0;
        inorderSum(root,sum);       //调用函数
        inorder(root,sum);
        return root;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值