leetcode -- Path Sum -- 重点

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。
参考http://www.cnblogs.com/zuoyuan/p/3722004.html

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)

你可能感兴趣的:(LeetCode)