剑指 Offer 34. 二叉树中和为某一值的路径

    技术2023-09-13  113

    输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

     

    示例: 给定如下二叉树,以及目标和 sum = 22,

                  5              / \             4   8            /   / \           11  13  4          /  \    / \         7    2  5   1

    返回:

    [    [5,4,11,2],    [5,8,4,5] ] # encoding=utf-8 # https://www.cnblogs.com/dongyangblog/p/11210820.html # 0 # 1 2 # 3 4 5 6 class BinaryTree: def __init__(self, data): self.data = data self.left = None self.right = None def get(self): return self.data def getleft(self): return self.left def getright(self): return self.right def setleft(self, node): self.left = node def setright(self, node): self.right = node binaryTree = BinaryTree(0) binaryTree.setleft(BinaryTree(1)) binaryTree.setright(BinaryTree(2)) binaryTree.getleft().setleft(BinaryTree(3)) binaryTree.getleft().setright(BinaryTree(4)) binaryTree.getright().setleft(BinaryTree(5)) binaryTree.getright().setright(BinaryTree(6)) def pathSum(root, sum): res, path = [], [] help(root, sum, res, path) return res def help(root, sum, res, path): if not root: return path.append(root.data) sum -= root.data if sum == 0 and not root.left and not root.right: res.append(list(path)) help(root.left, sum, res, path) help(root.right, sum, res, path) path.pop() print(pathSum(binaryTree, 7)) def pathSum(root, sum): res, path = [], [] help(root, sum, res, path) return res def help(root, sum, res, path): if not root: return path.append(root.data) sum -= root.data if sum == 0 and not root.left and not root.right: res.append(list(path)) help(root.left, sum, res, path) help(root.right, sum, res, path) path.pop() print(pathSum(binaryTree, 7))

    [[0, 2, 5]]

    Processed: 0.008, SQL: 10