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

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

作者: 月牙眼的楼下小黑 | 来源:发表于2018-10-02 10:25 被阅读22次
  • 标签:
  • 难度: 简单

  • 题目描述
  • 我的解法

先内嵌两个递归函数:tree_add(root,val): 实现树的每个结点加上值 val ;tree_sum(root): 返回树所有结点值之和。本解法的流程是: 先求取根节点 子树所有结点之和,得到 sum_right,然后更新 节点值:root.val += sum_right, 递归地将 子树和 子树转化成累加树,对于 子树,其每个结点需要加上此时根节点的值, 子树则无需改变。


# 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
        """
        if not root:
            return root
        
        def tree_add(root, val):
            if not root:
                return root
            tree_add(root.left,val)
            tree_add(root.right,val)
            root.val += val
            return root
        
        def tree_sum(root):
            if not root:
                return 0
            return tree_sum(root.left) + root.val + tree_sum(root.right)
            

        sum_right = tree_sum(root.right)
        root.val += sum_right
        self.convertBST(root.left)
        tree_add(root.left, root.val)
        self.convertBST(root.right)
        
        return root
        
  • 其他解法

暂略。

相关文章

网友评论

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

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