📅  最后修改于: 2023-12-03 14:55:44.253000             🧑  作者: Mango
给定一棵二叉树和一个整数K,判断该二叉树是否存在一对叶子节点,它们的和为K。
该问题可以通过深度优先搜索(DFS)解决。具体思路如下:
时间复杂度为 $O(n^2)$,其中 n 表示节点数。
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
leaf_nodes = []
path_sums = []
def dfs(node, depth, path_sum):
if node is None:
return
elif node.left is None and node.right is None:
leaf_nodes.append((node.val, depth))
path_sums.append(path_sum + node.val)
else:
dfs(node.left, depth + 1, path_sum + node.val)
dfs(node.right, depth + 1, path_sum + node.val)
dfs(root, 0, 0)
for i in range(len(leaf_nodes)):
for j in range(i + 1, len(leaf_nodes)):
if leaf_nodes[i][1] != leaf_nodes[j][1]:
continue
if path_sums[i] + path_sums[j] == sum:
return True
return False
其中,leaf_nodes 列表用于存储每个叶子节点的值和深度,path_sums 列表用于存储每个叶子节点对应路径上所有节点值的和。dfs 函数用于进行深度遍历,直到处理到叶子节点时将该节点的值和深度存入 leaf_nodes 列表,并将该节点到根节点路径上所有节点值的和存入 path_sums 列表。最后,对于每一对深度相同的叶子节点,检查它们对应的路径和是否等于目标值 sum。若存在,则返回 True;否则返回 False。
代码片段需按markdown标明,已在上述代码块中标注。