首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二叉树 hasPathSum() 实现

二叉树 hasPathSum() 是一个编程问题,用于检查二叉树中是否存在从根节点到叶子节点的路径,使得路径上所有节点值的和等于给定的整数 targetSum。这个问题通常用于解决二叉树的遍历和深度优先搜索(DFS)算法。

以下是一个使用深度优先搜索(DFS)算法的 Python 实现:

代码语言:python
代码运行次数:0
复制
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def hasPathSum(root: TreeNode, targetSum: int) -> bool:
    if not root:
        return False

    if not root.left and not root.right:
        return root.val == targetSum

    return hasPathSum(root.left, targetSum - root.val) or hasPathSum(root.right, targetSum - root.val)

这个实现首先检查根节点是否为空,如果为空则返回 False。然后,如果当前节点是叶子节点,检查其值是否等于目标和。如果不是叶子节点,递归地检查左子树和右子树,将目标和减去当前节点的值。如果左子树或右子树中存在满足条件的路径,则返回 True。

这个实现的时间复杂度是 O(n),其中 n 是二叉树中节点的数量。空间复杂度是 O(h),其中 h 是二叉树的高度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

有多少人真正会递归?

二叉树 ? 二叉树是天然的递归结构。其定义是:如果一个节点,它有左右两个孩子,且左右孩子都是一颗二叉树,则就存在一棵以该节点为根的二叉树。...从定义中可看出定义的是二叉树,但在定义里用二叉树来定义二叉树。因此二叉树的定义本身就是递归的定义。如下图示。 ? ? ? 04. 二叉树的最大深度 ? 给定一个二叉树,找出其最大深度。...Show me the Code // java boolean hasPathSum(TreeNode root, int targetSum) { /* 递归终止条件,当前节点为叶子节点 *.../ if (root == null) { return targetSum == 0; } /* 当前节点左子树寻找 */ if (hasPathSum...修改后的 Code boolean hasPathSum(TreeNode root, int targetSum) { if (root == null) { return

51120
  • 【leetcode刷题】T123-路径总和

    木又连续日更第75天(75/100) ---- 木又的第123篇leetcode解题报告 二叉树类型第13篇解题报告 leetcode第112题:路径总和 https://leetcode-cn.com.../problems/path-sum ---- 【题目】 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。...示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \...【思路】 本题和【T122-二叉树的最小深度】较为类似,对于一个节点,如果无孩子节点,则判断剩余的和是否为node->val;如果有孩子节点,则递归遍历孩子节点。...return hasPathSum(root->left, sum-root->val); return hasPathSum(root->right, sum-root->val);

    34610

    一天一大 leet(路径总和)难度:简单-Day20200707

    题目: 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径, 这条路径上所有节点值相加等于目标和。 说明 叶子节点是指没有子节点的节点。...示例 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \...使用递归遍历二叉树 递归的逻辑: 参数上一个节点的左节点或者右节点,减去上一个节点的和 遇到叶子节点下一个节点终止 sum 减去递归中遇到的节点,返回 sum 与最后的节点差值是否为 0 /** *...(root.left, sum - root.val), right = hasPathSum(root.right, sum - root.val) // 存在一侧满足就满足 return...理论上任何一个节点我们都可以与上一节点累加去校验逻辑 现在的问题是,如果只单纯的存储每一层所以的节点,就都是了每个节点的父级节点,不知道了与谁相加 那么尝试在存入节点时就存入处理后的值(借助递归方法中使用的依次减掉已经遇到的节点) 代码实现

    14630

    二叉树刷题总结:二叉树的属性

    是否对称 给定一个二叉树,检查它是否是镜像对称的。 image 上图为对称二叉树 image 上图的二叉树则不是镜像的 思路 判断是否是镜像,需要去判断二叉树的里侧和外侧是否相同。...,返回 false,左节点不为空,右节点为空,返回 false; 左右节点均不为空,但数值不同,返回 false; 如果左右节点均为空,则返回 true; 如果以上条件均不满足,则再进入递归逻辑 代码实现...但是也可以用递归法来实现,首先可以明确深度最大的叶子节点一定是最后一行,那如何找最左边的呢?我们可以使用前序遍历,优先从左边开始搜索。...= null) { boolean left = haspathsum(root.left, targetsum); if (left) {// 已经找到...(root.left, targetsum - root.val) || haspathsum(root.right, targetsum - root.val); } } 路径总和2 给定一个二叉树和一个目标和

    34010

    七十九、深度和广度优先搜索算法

    深度优先算法(DFS) 深度优先算法的本质是回溯算法,多数是应用在树上,一个比较典型的应用就是二叉树的中序遍历。...DFS的实现考虑要以下几个问题即可: ①.边界范围:「即搜索终止条件,递归结束条件。」 ②.可供选择的范围列表:「所有可供选择的范围列表。」 ③.已做出的选择列表:「标记当前已经做出的选择。」...一般用堆数据结构来辅助实现DFS算法。 根据深度优先搜索的特点,采用递归函数实现比较简单。...Leetcode第111题:二叉树的最小深度 给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 # 说明: 叶子节点是指没有子节点的节点。...class Solution: def hasPathSum(self, root: TreeNode, sum: int) -> bool: # 二叉树 root 为 null

    57930
    领券