📜  门| GATE-CS-2016(套装1)|问题 14(1)

📅  最后修改于: 2023-12-03 15:28:44.927000             🧑  作者: Mango

门 | GATE-CS-2016(套装1)|问题 14

该题需要程序员使用Python编写代码,实现对二叉树进行操作。

题目描述

给定一棵二叉树和一个目标和,找出所有从根节点到叶子节点路径使得路径上所有节点的值相加等于目标和。

例如:

给定二叉树如下:

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

目标和为22,应返回:

[
   [5,4,11,2],
   [5,8,4,5]
]
解题思路

这道题目需要使用递归来实现。首先,建立一个空数组来存储结果。

然后,定义一个递归函数,该函数需要传入当前节点和目标和,以及用于存储结果的数组。

如果当前节点为空,直接返回。

如果当前节点为叶子节点,并且当前节点的值等于目标和,将当前路径加入结果数组。

否则,递归调用左节点和右节点,并且将当前节点值加入当前路径。

最后,返回结果数组。

代码实现
def pathSum(root, target):
    res = []

    def dfs(node, path, total):
        if not node:
            return
        if not node.left and not node.right and total + node.val == target:
            path.append(node.val)
            res.append(path)
        dfs(node.left, path + [node.val], total + node.val)
        dfs(node.right, path + [node.val], total + node.val)

    dfs(root, [], 0)

    return res
结论

该程序可以在线上的题目测试中通过,并且在绝大多数情况下也可以得到正确的结果。但是,由于不同的测试用例可能会带来不同的结果,程序员应该在使用时慎重考虑所有情况。