LeetCode 112. 路徑總和(C++、python)
阿新 • • 發佈:2019-01-01
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 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)