码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 112. Path Sum

时间:2016-02-18 01:14:22      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

是否存在根到叶节点的和等于给定数。
 
思路:递归。判断左儿子或右儿子是否存在这一路径(sum变为sum-root->val)。
 
ver0:递归到最后会是叶节点的左右儿子,所以要有root==NULL的判断
 1 class Solution {
 2 public:
 3     bool hasPathSum(TreeNode* root, int sum) {
 4         if(root==NULL){//ERROR
 5             if(sum == 0) return true;
 6             else return false;
 7         }
 8         // if(sum < root->val) return false;
 9         return hasPathSum(root->left,sum-root->val) || hasPathSum(root->right,sum-root->val);
10     }
11 };

WA:

Input:[] 0
Output:true
Expected:false
 
ver1:原始树是否为空另外判断。
 1 class Solution {
 2 public:
 3     bool hasPathSum(TreeNode* root, int sum) {
 4         if(root==NULL) return false;
 5         return help(root,sum);
 6         
 7     }
 8     
 9     bool help(TreeNode* root, int sum){
10         if(root==NULL){
11             if(sum == 0) return true;
12             else return false;
13         }
14         // if(sum < root->val) return false;
15         return help(root->left,sum-root->val) || help(root->right,sum-root->val);//ERROR
16     }
17 };

WA:

Input:[1,2] 1
Output:true
Expected:false
将只有一个儿子的节点误当作叶节点。
 
ver2:
 1 class Solution {
 2 public:
 3     bool hasPathSum(TreeNode* root, int sum) {
 4         if(root==NULL) return false;
 5         return help(root,sum);
 6         
 7     }
 8     
 9     bool help(TreeNode* root, int sum){
10         if(root==NULL){
11             if(sum == 0) return true;
12             else return false;
13         }
14         // if(sum < root->val) return false;
15         
16         if(root->left && root->right) return help(root->left,sum-root->val) || help(root->right,sum-root->val);
17         if(root->left) return help(root->left,sum-root->val);
18         if(root->right) return help(root->right,sum-root->val);

      //leaf-node:
19 if(sum == 0) return true;//ERROR 20 return false; 21 22 } 23 };

WA:

Input:[1] 1
Output:false
Expected:true
叶节点的情况下判断错误(即sum==0),应为sum==root->val。
 
ver3:
 1 class Solution {
 2 public:
 3     bool hasPathSum(TreeNode* root, int sum) {
 4         if(root==NULL) return false;
 5         return help(root,sum);
 6         
 7     }
 8     
 9     bool help(TreeNode* root, int sum){
10         // if(root==NULL){
11         //     if(sum == 0) return true;
12         //     else return false;
13         // }
14         // if(sum < root->val) return false;
15         
16         if(root->left && root->right) return help(root->left,sum-root->val) || help(root->right,sum-root->val);
17         if(root->left) return help(root->left,sum-root->val);
18         if(root->right) return help(root->right,sum-root->val);
19         if(sum == root->val) return true;
20         return false;
21         
22     }
23 };

 

别人的简洁版代码:
 1 class Solution {
 2 public:
 3     bool hasPathSum(TreeNode* root, int sum) {
 4         if(root==NULL)
 5             return false;
 6         if(root->val == sum && root->left == NULL && root->right == NULL)
 7             return true;
 8         return hasPathSum(root->left, sum-root->val) || hasPathSum(root->right, sum-root->val);
 9     }
10 };

递归到最后传入的是叶节点而非其左右儿子,所以不必另开help函数。

如果是只有一个儿子的节点,也可处理(落入root==NULL的判断内)。

 

LeetCode 112. Path Sum

标签:

原文地址:http://www.cnblogs.com/co0oder/p/5196918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!