📜  数据结构 |树遍历 |问题 4(1)

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

数据结构 | 树遍历 | 问题 4

在进行树的遍历时,我们可以采用不同的方法,其中深度优先搜索算法和广度优先搜索算法是最常见的两种方法。这两种方法在树的遍历中都有很多应用场景,例如查找最小深度、查找二叉树的最大深度、查找二叉树中是否存在某个节点等问题。在本篇文章中,我们将探讨树的遍历问题4的解法。

问题描述

给定一棵二叉树和一个目标和,判断该二叉树中是否存在根节点到叶子节点的路径,这条路径上的所有节点值相加等于目标和。

例如,给定以下二叉树和目标和 22

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

从根节点到叶子节点路径 5->4->11->2 的和为 22,因此返回 true,否则 false。

解法思路

通过深度优先搜索算法(DFS)遍历这棵二叉树,遍历到每个节点时,判断该节点的值是否等于当前目标和,若是,则说明已经找到从根节点到叶子节点的一条路径上的所有节点值相加等于目标和,直接返回 true。若否,则将目标和减去该节点的值,继续对该节点的左右子节点进行遍历,直到遍历到叶子节点仍未找到符合条件的路径,最终返回 false。

代码实现

以下是基于 Python 语言实现的代码片段:

# 定义树的节点
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

# 判断是否存在根节点到叶子节点的路径,路径和等于目标和
def has_path_sum(root: TreeNode, sum: int) -> bool:
    if not root:
        return False
    if not root.left and not root.right:
        return sum == root.val
    return has_path_sum(root.left, sum-root.val) or has_path_sum(root.right, sum-root.val)
总结

通过本篇文章的介绍,我们了解了由树的深度优先搜索算法解决的树的遍历问题4,即判断二叉树是否存在根节点到叶子节点的一条路径上的所有节点值相加等于目标和的情况。在实现过程中,我们利用递归的方式对该二叉树进行遍历,并在遍历每个节点时判断节点的值是否符合目标和的要求。