Leetcode: Path Sum

来源:互联网 发布:c语言if else语句成绩 编辑:程序博客网 时间:2024/06/05 05:25

Get idea from Code Ganker′s Solution


Question

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.

For example:
Given the below binary tree and sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

Hide Tags Tree Depth-first Search


Analysis

depth-first search
There are two cases we need to consider:
1. node has only one child
2. node(leaf) has two children.


Solution

Mistake Taken

This solution will give a error case. if tree only has leftmost branch, and the sum of the first several nodes are equal to target. This solution will return True, not False.

# Definition for a binary tree node.# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:    # @param {TreeNode} root    # @param {integer} sum    # @return {boolean}    def hasPathSum(self, root, sum):        if root==None:            return False        if root.left==None:            return self.helper(root.right,sum-root.val)        elif root.right==None:            return self.helper(root.left, sum-root.val)        return self.helper(root,sum)    def helper(self, root, sum):        if root==None:            if sum==0:                return True            else:                return False        return self.helper(root.left, sum-root.val) or self.helper(root.right, sum-root.val)  


Correct Solution

The stop condition need to consider the None. There are only two cases involved None, discussed in Analysis

# Definition for a binary tree node.# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:    # @param {TreeNode} root    # @param {integer} sum    # @return {boolean}    def hasPathSum(self, root, sum):        return self.helper(root,sum)    def helper(self, root, sum):        if root==None:            return False        if root.left==None and root.right==None and root.val==sum:            return True        return self.helper(root.left, sum-root.val) or self.helper(root.right, sum-root.val)    


0 0