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

对于tree的问题,一定要注意使用dfs,bfs. 这里用dfs就是用preorder traverse。遍历左右subtree。

my code:
这里要注意考虑root没有儿子,只有一个儿子,有两个儿子的情况。当只有一个儿子的时候,就只有一个叶子节点,另外一边可以看做一个false的叶子节点。所以在递归里面要判断root是否为none,如果是none,那么则返回false

class Solution(object):

    def dfs(self, root, mysum, target_sum):
        if not root:#当root只有一个儿子的时候
            return False
        elif root.left == None and root.right == None:
            mysum += root.val#这里要把当前root节点的val加上之后再判断
            if mysum == target_sum:
                return True
            else:
                return False
        else:
            mysum += root.val
            a = self.dfs(root.left, mysum, target_sum)
            b = self.dfs(root.right, mysum, target_sum)

            return  a or b



    def hasPathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: bool
        """
        mysum = 0
        if root == None:
            return False
        else:
            return self.dfs(root,mysum, sum)

更简单的思路,递归减小sum。

class Solution:
    # @param root, a tree node
    # @param sum, an integer
    # @return a boolean
    def hasPathSum(self, root, sum):
        if root == None:
            return False
        if root.left == None and root.right == None:
            return root.val == sum
        return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)