LeetCode 112. 路径总和 | Python
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了LeetCode 112. 路径总和 | Python,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2230字,纯文字阅读大概需要4分钟。
内容图文
![LeetCode 112. 路径总和 | Python](/upload/InfoBanner/zyjiaocheng/628/9ee1632288984a7c85459e31de28346f.jpg)
112. 路径总和
题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/path-sum
题目
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ 4 8
/ / 11 13 4
/ \ 7 2 1
返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。
解题思路
思路:递归、广度优先搜索
在这里先讲 递归,这个解法的思路是从根节点往下找,找到叶子节点。
先假设跟节点到当前节点的路径和为 val,那么将问题转变一下,是否能够找到从当前节点到叶子节点的路径和为 sum - val
,这符合递归的性质。
那么也就是说从根节点往下找到叶子节点,如果确定当前节点是叶子节点,那么判断 sum 是否等于当前节点的 val 值即可。如果不是叶子节点,那么将继续向下查找。
具体的代码实现见【代码实现 # 递归】
同样的这道题中,我们也可以使用 广度优先搜索 的思路来解决。在这里我们使用队列,存储节点以及根节点到某个节点的路径和。
以题目所给示例,具体的实现过程如下图所示:
具体实现代码见【代码实现 # 广度优先搜索】
代码实现
# 递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root:
return False
if not root.left and not root.right:
return sum == root.val
return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)
# 广度优先搜索
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root:
return False
from collections import deque
# 队列存储节点和路径和
queue = deque()
queue.append((root, root.val))
while queue:
# 出队,开始搜索
node, path = queue.popleft()
# 如果叶子节点,路径和等于目标值时,直接返回 True
if not node.left and not node.right and path == sum:
return True
if node.left:
queue.append((node.left, path + node.left.val))
if node.right:
queue.append((node.right, path + node.right.val))
return False
实现结果
递归
广度优先搜索
文章原创,欢迎关注点赞。微信公众号《书所集录》同步更新,同样欢迎关注交流。
内容总结
以上是互联网集市为您收集整理的LeetCode 112. 路径总和 | Python全部内容,希望文章能够帮你解决LeetCode 112. 路径总和 | Python所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。