📜  门| GATE CS Mock 2018年|套装2 |问题11(1)

📅  最后修改于: 2023-12-03 14:58:22.771000             🧑  作者: Mango

门| GATE CS Mock 2018年|套装2 |问题11

这是一道关于二叉搜索树的问题。我们需要判断两个节点之间是否有路径和等于给定值的路径。以下是一个解决该问题的Python代码示例:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def pathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: bool
        """
        if not root:
            return False
        
        def dfs(node, current_sum):
            if not node:
                return False
            if not node.left and not node.right:
                if current_sum + node.val == sum:
                    return True
                else:
                    return False
            
            left = dfs(node.left, current_sum + node.val)
            right = dfs(node.right, current_sum + node.val)
            
            return left or right
        
        return dfs(root, 0)

该代码定义了一个Solution类,包含一个名为pathSum的函数,该函数接受一个二叉树的根节点和一个正整数sum,返回一个布尔值,表示是否存在一条从根节点到叶子节点的路径,使得路径上所有节点的和等于sum。

该函数使用深度优先搜索(DFS)的方法实现。每次递归访问一个节点,累计该节点的值,并检查其是否为叶子节点。如果是,则检查累计和是否等于sum,如果是,则返回True,否则返回False。如果不是叶子节点,则递归访问其左右子节点,并将累计和传递给它们。如果左右子节点任意一个返回True,则说明存在一条路径满足条件,返回True;否则返回False。

该函数的时间复杂度和空间复杂度都是O(n),其中n是树中节点的数量。