美文网首页
Leetcode538. 把二叉搜索树转换为累加树

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

作者: LonnieQ | 来源:发表于2019-11-15 21:30 被阅读0次

    题目

    给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。

    例如:

    输入: 二叉搜索树:
                  5
                /   \
               2     13
    
    输出: 转换为累加树:
                 18
                /   \
              20     13
    

    思路

    中序遍历两遍,第一遍求和,第二遍把和赋予给当前节点,然后和减去当前节点值。

    C++代码

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree

    相关文章

      网友评论

          本文标题:Leetcode538. 把二叉搜索树转换为累加树

          本文链接:https://www.haomeiwen.com/subject/jiqeictx.html