剑指offer 34 - 二叉树中和为某一值的路径 - python

33 阅读1分钟

题目描述:

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

示例:

给定如下二叉树,以及目标和 sum = 225
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:

[
   [5,4,11,2],
   [5,8,4,5]
]
 

提示:节点总数 <= 10000


直接套用回溯法求解模版即可,没啥好说的。整数可以分为当前值和累加值的和,因此,可以使用递归判断当前的树中是否存在路径使得累加值numbers + currentNumber = exceptNumber,如果有就将其加入到路径集中。

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        if not root: return []

        r = []  # 结果集

        def track(root, num, path):
            if not root: return
            # 做选择
            path.append(root.val)
            num += root.val
			# 出口
            if num == sum and not root.left and not root.right:
                print(path)
                r.append(path.copy())
			# 回溯
            if root.left: track(root.left, num, path)
            if root.right: track(root.right, num, path)
            # 撤销选择
            path.pop()

        track(root, 0, [])

        return r