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

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

题目

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

测试样例:

输入: 原始二叉搜索树:
              5
            /   \
           2     13

输出: 转换为累加树:
             18
            /   \
          20     13

注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同

题解

对于二叉搜索树,其中序遍历的结果是递增的。因此,如果我们使用中序遍历,对于当前节点其后面遍历的结点都大于当前节点。因为,我们不按左中右的方式进行遍历,而是按照右中左的方式进行遍历,我们将遍历的结果累加起来,显然对当前节点就是加上之前的结果。详细过程见代码

代码

	int val = 0;
    TreeNode* convertBST(TreeNode* root) {
        if(root == NULL)    return nullptr;
        convertBST(root->right);
        val += root->val;
        root->val = val;
        convertBST(root->left);
        return root; 
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode 538. 把二叉搜索树转换为累加树 C++)