Leetcode 每日一题-从二叉搜索树到更大和数

二叉树的重要性质:二叉搜索树的先序遍历(左中右)可以得到二叉树中从小到大排列的序列。
同理,反先序遍历‘(右中左)可以得到从大到小排列的序列,那么记录一个sum值,每遍历到一个节点,就用sum累加这个节点的值,就能得到大于等于该节点的序列的累加和。

class Solution {
public:
    int sum = 0;
    TreeNode* bstToGst(TreeNode* root) {
        if(root == nullptr)return root;  // 处理边界条件
        bstToGst(root->right);  // 右子树中都是比当前节点大的数
        sum += root->val;  // 当遍历到最大节点时会停下,一步步往小值累加。
        root->val = sum; 
        bstToGst(root->left);  // 累加上了自己后,可以让左边的子树使用了。
        return root;
    }
};

你可能感兴趣的:(leetcode,算法,数据结构)