LeetCode 112. Path Sum
2016-02-18 00:01
471 查看
是否存在根到叶节点的和等于给定数。
思路:递归。判断左儿子或右儿子是否存在这一路径(sum变为sum-root->val)。
ver0:递归到最后会是叶节点的左右儿子,所以要有root==NULL的判断
WA:
Input:[] 0
Output:true
Expected:false
ver1:原始树是否为空另外判断。
WA:
Input:[1,2] 1
Output:true
Expected:false
将只有一个儿子的节点误当作叶节点。
ver2:
WA:
Input:[1] 1
Output:false
Expected:true
叶节点的情况下判断错误(即sum==0),应为sum==root->val。
ver3:
别人的简洁版代码:
递归到最后传入的是叶节点而非其左右儿子,所以不必另开help函数。
如果是只有一个儿子的节点,也可处理(落入root==NULL的判断内)。
思路:递归。判断左儿子或右儿子是否存在这一路径(sum变为sum-root->val)。
ver0:递归到最后会是叶节点的左右儿子,所以要有root==NULL的判断
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root==NULL){//ERROR if(sum == 0) return true; else return false; } // if(sum < root->val) return false; return hasPathSum(root->left,sum-root->val) || hasPathSum(root->right,sum-root->val); } };
WA:
Input:[] 0
Output:true
Expected:false
ver1:原始树是否为空另外判断。
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root==NULL) return false; return help(root,sum); } bool help(TreeNode* root, int sum){ if(root==NULL){ if(sum == 0) return true; else return false; } // if(sum < root->val) return false; return help(root->left,sum-root->val) || help(root->right,sum-root->val);//ERROR } };
WA:
Input:[1,2] 1
Output:true
Expected:false
将只有一个儿子的节点误当作叶节点。
ver2:
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root==NULL) return false; return help(root,sum); } bool help(TreeNode* root, int sum){ if(root==NULL){ if(sum == 0) return true; else return false; } // if(sum < root->val) return false; if(root->left && root->right) return help(root->left,sum-root->val) || help(root->right,sum-root->val); if(root->left) return help(root->left,sum-root->val); if(root->right) return help(root->right,sum-root->val); //leaf-node: if(sum == 0) return true;//ERROR return false; } };
WA:
Input:[1] 1
Output:false
Expected:true
叶节点的情况下判断错误(即sum==0),应为sum==root->val。
ver3:
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root==NULL) return false; return help(root,sum); } bool help(TreeNode* root, int sum){ // if(root==NULL){ // if(sum == 0) return true; // else return false; // } // if(sum < root->val) return false; if(root->left && root->right) return help(root->left,sum-root->val) || help(root->right,sum-root->val); if(root->left) return help(root->left,sum-root->val); if(root->right) return help(root->right,sum-root->val); if(sum == root->val) return true; return false; } };
别人的简洁版代码:
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root==NULL) return false; if(root->val == sum && root->left == NULL && root->right == NULL) return true; return hasPathSum(root->left, sum-root->val) || hasPathSum(root->right, sum-root->val); } };
递归到最后传入的是叶节点而非其左右儿子,所以不必另开help函数。
如果是只有一个儿子的节点,也可处理(落入root==NULL的判断内)。
相关文章推荐
- Java RMI详解[转]
- 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
- JMS简介与ActiveMQ实战
- java 对象排序
- 学完平面设计培训课能赚到钱吗?
- magento插件开发,Mobilnik银行支付插件
- 如何修改Liferay的Session过期时间
- Oracle SQL 性能健康检查脚本 (SQLHC) (文档 ID 1626277.1)
- TQ210开发板安装QT交叉编译环境安装总结(转)
- Java多线程参考资料
- 通达OA助力老挝金木棉集团
- hive-1.2.1 hbase-1.1.3 整合
- 每天工作四个小时--个人版本1.0
- 会声会影录制画外音教程
- 会声会影如何使用覆叠滤镜
- 会声会影提取伴奏乐教程
- 会声会影剪切合并歌曲教程
- 会声会影制作视频翻页转场教程
- 会声会影如何渲染高清视频
- ecmaScript5新特性