路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
解题思路
1、使用广度优先搜索的方式,记录从根节点到当前节点的路径和。
2、使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和。
代码
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root:
return False
#建立两个队列保存要遍历的节点
que_node = collections.deque([root])
que_val = collections.deque([root.val])
#对队列进行广度优先搜索
while que_node:
now = que_node.popleft()
temp = que_val.popleft()
#判断到达终点时目标值是否为路径和
if not now.left and not now.right:
if temp == sum:
return True
continue
#遍历当下左子树时
if now.left:
que_node.append(now.left)
que_val.append(now.left.val + temp)
#遍历当下右子树时
if now.right:
que_node.append(now.right)
que_val.append(now.right.val + temp)
return False