跳至主要內容

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

ITCharge大约 1 分钟

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

  • 标签:树、深度优先搜索、回溯、二叉树
  • 难度:中等

题目链接

题目大意

给定一棵二叉树的根节点 root 和一个整数 target

要求:打印出二叉树中各节点的值的和为 target 的所有路径。从根节点开始往下一直到叶节点所经过的节点形成一条路径。

解题思路

回溯求解。在回溯的同时,记录下当前路径。同时维护 target,每遍历到一个节点,就减去该节点值。如果遇到叶子节点,并且 target == 0 时,将当前路径加入答案数组中。然后递归遍历左右子树,并回退当前节点,继续遍历。

代码

class Solution:
    def pathSum(self, root: TreeNode, target: int) -> List[List[int]]:
        res = []
        path = []
        def dfs(root: TreeNode, target: int):
            if not root:
                return
            path.append(root.val)
            target -= root.val
            if not root.left and not root.right and target == 0:
                res.append(path[:])
            dfs(root.left, target)
            dfs(root.right, target)
            path.pop()
        dfs(root, target)
        return res