美文网首页
Leet 112 路径总和

Leet 112 路径总和

作者: 钢笔先生 | 来源:发表于2019-08-11 13:23 被阅读0次

    Time: 2019-08-11

    题目描述

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

    说明: 叶子节点是指没有子节点的节点。

    示例:
    给定如下二叉树,以及目标和 sum = 22,

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

    返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/path-sum
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    深度搜索树,注意递归时的出口和递归拆解的逻辑。

    代码

    # 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, target: int) -> bool:
            return self.dfs(root, 0, target)
        
        def dfs(self, root, curSum, target):
            # 递归出口
            if not root:
                return False
            # 到叶子结点时,注意叶子结点的值加上
            if root.left == None and root.right == None:
                return curSum + root.val == target
            
            # 递归拆解
            return self.dfs(root.left, curSum + root.val, target) or self.dfs(root.right, curSum + root.val, target)
            
    

    时空复杂度

    时间复杂度:O(n)

    相似习题

    https://leetcode-cn.com/problems/path-sum-ii/

    END.

    相关文章

      网友评论

          本文标题:Leet 112 路径总和

          本文链接:https://www.haomeiwen.com/subject/yaajjctx.html