zoukankan      html  css  js  c++  java
  • python每日练习Day30

    题目描述:

    112. 路径总和

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

    说明

    叶子节点是指没有子节点的节点。

    示例

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

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

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

    题解

    https://leetcode-cn.com/problems/path-sum/solution/lu-jing-zong-he-by-leetcode-solution/

    方法一:DFS:广度搜索

    方法二:递归

    python代码

     1 # Definition for a binary tree node.
     2 # class TreeNode:
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution:
     9     def hasPathSum(self, root: TreeNode, sum: int) -> bool: 
    10         # #树使用的是双向链表
    11         # #如果根节点为空,直接返回False
    12         # if not root:
    13         #     return False
    14 
    15         # #依次遍历根节点,直到叶子节点:判定叶子节点的办法:左叶子的孩子和右叶子的孩子均为None
    16         # que_node = collections.deque([root])
    17         # que_val_sum = collections.deque([root.val])
    18         # while que_node:
    19         #     node = que_node.popleft()  #从队列中取出第一个节点
    20         #     node_val = que_val_sum.popleft()  #取出第一个节点的元素
    21         #     if not node.left and not node.right:
    22         #         if node_val == sum:
    23         #             return True
    24         #         continue
    25         #     #如果该节点左叶子存在,那么将左叶子直接加入队列中;
    26         #     #计算该节点的元素与孩子节点的值的和
    27         #     if node.left:
    28         #         que_node.append(node.left)
    29         #         que_val_sum.append(node.left.val + node_val)
    30         #     #同理左节点
    31         #     if node.right:
    32         #         que_node.append(node.right)
    33         #         que_val_sum.append(node.right.val + node_val)
    34         # return False
    35 
    36         #采用递归的方法
    37         #如果该节点是叶子节点,那么直接判断与sum的关系
    38         if not root:
    39             return False
    40         if not root.left and not root.right:
    41             return root.val == sum
    42         return self.hasPathSum(root.left,sum - root.val) or self.hasPathSum(root.right,sum - root.val)

    题目来源:https://leetcode-cn.com/problems/path-sum/

  • 相关阅读:
    poj 3304线段与直线相交
    poj 1039 几何没思路
    zoj 1010 (线段相交判断+多边形求面积)
    poj 1654 Area (多边形求面积)
    poj 3348--Cows(凸包求面积)
    zoj 2107&&hdu 1007最近点对问题
    Codeforces Round #260 (Div. 2)AB
    MMORPG大型游戏设计与开发(part1 of net)
    MMORPG大型游戏设计与开发(规范)
    MMORPG大型游戏设计与开发(构架)
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/13274528.html
Copyright © 2011-2022 走看看