• 剑指offer python版 某一路径和为某值


    from collections import deque
    
    
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Tree(object):
        def __init__(self):
            self.root = None
    
        def construct_tree(self, values=None):
            if not values:
                return None
            self.root = TreeNode(values[0])
            queue = deque([self.root])
            leng = len(values)
            nums = 1
            while nums < leng:
                node = queue.popleft()
                if node:
                    node.left = TreeNode(values[nums]) if values[nums] else None
                    queue.append(node.left)
                    if nums + 1 < leng:
                        node.right = TreeNode(values[nums + 1]) if values[nums + 1] else None
                        queue.append(node.right)
                        nums += 1
                    nums += 1
    
    
    def find_path(tree, num):
        ret = []
        if not tree:
            return ret
        path = [tree]
        sums = [tree.val]
    
        def dfs(tree):
            if tree.left:
                path.append(tree.left)
                sums.append(sums[-1]+tree.left.val)
                dfs(tree.left)
            if tree.right:
                path.append(tree.right)
                sums.append(sums[-1] + tree.right.val)
                dfs(tree.right)
            if not tree.left and not tree.right:
                if sums[-1] == num:
                    ret.append([p.val for p in path])
            path.pop()
            sums.pop()
    
        dfs(tree)
        return ret
    
    
    if __name__ == '__main__':
        t = Tree()
        t.construct_tree([1, 3, 6, 4, 3, 1, 1])
    print find_path(t.root, 8)
  • 相关阅读:
    1265 四点共面
    1003 阶乘后面0的数量
    1080 两个数的平方和
    1090 3个数和为0
    1087 1 10 100 1000
    1082 与7无关的数
    OpenLayers工作原理
    CI(持续集成)CD(持续交付)
    打包命令
    文件与目录管理重点
  • 原文地址:https://www.cnblogs.com/xzm123/p/9875698.html
Copyright © 2020-2023  润新知