1. 程式人生 > >LeetCode 112. 路徑總和(C++、python)

LeetCode 112. 路徑總和(C++、python)

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

說明: 葉子節點是指沒有子節點的節點。

示例: 
給定如下二叉樹,以及目標和 sum = 22

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2

C++

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool DFS(TreeNode* root,int sum,int tmp)
    {
        if(NULL==root)
        {
            return false;
        }
        else
        {
            if(NULL==root->left && NULL==root->right)
            {
                return sum==tmp+root->val;
            }
            else
            {
                return DFS(root->left, sum, tmp+root->val) || DFS(root->right, sum, tmp+root->val);
            }
        }
    }
    
    bool hasPathSum(TreeNode* root, int sum) 
    {
        if(NULL==root)
        {
            return false;
        }
        else
        {
            return DFS(root,sum,0);
        }        
    }
};

python

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def DFS(self, root, su, tmp):
        if None==root:
            return False
        else:
            if None==root.left and None==root.right:
                return su==tmp+root.val
            else:
                return self.DFS(root.left, su, tmp+root.val) or self.DFS(root.right, su, tmp+root.val)
            
    def hasPathSum(self, root, su):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: bool
        """
        if None==root:
            return False
        else:
            return self.DFS(root, su, 0)