LeetCode 112. Path Sum
原题链接在这里:https://leetcode.com/problems/path-sum/
题目:
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.
题解:
减掉当前节点值,判断是不是叶子节点同时满足sum==0即可。
Time Complexity: O(n), worst case是每个node都跑了一次.
Space: O(logn), stack space.
AC Java:
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode() {} 8 * TreeNode(int val) { this.val = val; } 9 * TreeNode(int val, TreeNode left, TreeNode right) { 10 * this.val = val; 11 * this.left = left; 12 * this.right = right; 13 * } 14 * } 15 */ 16 class Solution { 17 public boolean hasPathSum(TreeNode root, int targetSum) { 18 if(root == null){ 19 return false; 20 } 21 22 targetSum -= root.val; 23 if(root.left == null && root.right == null && targetSum == 0){ 24 return true; 25 } 26 27 return hasPathSum(root.left, targetSum) || hasPathSum(root.right, targetSum); 28 } 29 }
AC C++:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 bool hasPathSum(TreeNode* root, int targetSum) { 15 if(!root){ 16 return false; 17 } 18 19 targetSum -= root->val; 20 if(!root->left && !root->right && targetSum == 0){ 21 return true; 22 } 23 24 return hasPathSum(root->left, targetSum) || hasPathSum(root->right, targetSum); 25 } 26 };
AC Python:
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, val=0, left=None, right=None): 4 # self.val = val 5 # self.left = left 6 # self.right = right 7 class Solution: 8 def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool: 9 if not root: 10 return False 11 12 targetSum -= root.val 13 if not root.left and not root.right and targetSum == 0: 14 return True 15 16 return self.hasPathSum(root.left, targetSum) or self.hasPathSum(root.right, targetSum)