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

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

例如:

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

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

思路:

  • 先递归到右子树的最右的叶子节点开始,逐渐累加
  • 到根节点后,将右子树的累加和加到根节点,然后转化左子树
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def convertBST(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        self.helper(root, 0)
        
        return root

    def helper(self, root, right_sum):
        if not root:
            return right_sum
        
        right_sum = self.helper(root.right, right_sum)

        root.val += right_sum

        right_sum = root.val

        right_sum = self.helper(root.left, right_sum)

        return right_sum
posted @ 2018-09-21 16:38  yuyin  阅读(82)  评论(0编辑  收藏  举报