dangdangA

导航

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/

posted on 2020-07-09 16:42  dangdangA  阅读(122)  评论(0编辑  收藏  举报