博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 112. Path Sum
阅读量:5214 次
发布时间:2019-06-14

本文共 3103 字,大约阅读时间需要 10 分钟。

是否存在根到叶节点的和等于给定数。
 
思路:递归。判断左儿子或右儿子是否存在这一路径(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);//ERROR16     }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;//ERROR20         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的判断内)。

 

转载于:https://www.cnblogs.com/co0oder/p/5196918.html

你可能感兴趣的文章
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
HDU 2189 悼念512汶川大地震遇难同胞――来生一起走 --生成函数
查看>>
2014 Super Training #4 G What day is that day? --两种方法
查看>>
材料特性
查看>>
oracle中ddl的管理
查看>>
如何灵活利用免费开源图标字体-IcoMoon篇——张鑫旭
查看>>
jumpservice使用465端口发送邮件
查看>>
eclipse注释模板及格式化模板导入步骤
查看>>
TP5与TP3.X对比
查看>>
我的2015与2016
查看>>
【洛谷 P1120】 小木棍[数据加强版]
查看>>
【笔记】康拓展开&逆康拓展开
查看>>
关于Oppen Live Writer中插入可折叠着色代码的插件
查看>>
dzx2.5 template\default\forum\viewthread_node.htm代码调用解放(和我一样的菜鳥版)
查看>>
SQL:事务(2)
查看>>
python 实现堆和堆排序
查看>>
数据清洗
查看>>