1 """
2 Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
3 Note: A leaf is a node with no children.
4 Example:
5 Given the below binary tree and sum = 22,
6 5
7 / \
8 4 8
9 / / \
10 11 13 4
11 / \ \
12 7 2 1
13 return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
14 """
15 """
16 这道求二叉树的路径需要用深度优先算法DFS的思想来遍历每一条完整的路径,
17 也就是利用递归不停找子节点的左右子节点,而调用递归函数的参数只有当前节点和sum值。
18 首先,如果输入的是一个空节点,则直接返回false,
19 如果输入的只有一个根节点,则比较当前根节点的值和参数sum值是否相同,
20 若相同,返回true,否则false。
21 这个条件也是递归的终止条件。
22 下面我们就要开始递归了,由于函数的返回值是Ture/False,
23 我们可以同时两个方向一起递归,中间用或||连接,只要有一个是True,整个结果就是True。
24 递归左右节点时,这时候的sum值应该是原sum值减去当前节点的值。
25 """
26 class TreeNode:
27 def __init__(self, x):
28 self.val = x
29 self.left = None
30 self.right = None
31
32 class Solution:
33 def hasPathSum(self, root, sum):
34 if root == None:
35 return False
36 if root.left == None and root.right == None: #!!!判别条件
37 return root.val == sum
38 return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)
39 #!!!sum值不断改变为 sum - root.val