Path Sum 路径和(注:同时包含得到各个路径的模板:两种不同表达形式的代码)
来源:互联网 发布:机器码加密软件破解 编辑:程序博客网 时间:2024/05/21 03:17
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.
1.我的解法(递归)
/** * 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 pathsum(TreeNode* root, int all, int sum){ if(root->left== NULL && root->right == NULL){ if(all+root->val == sum) return true; else return false; } if(root->left== NULL || root->right == NULL){//这里需要处理只有一个子节点的情况,不能把有空的那条算为路径 TreeNode* t = root->left!=NULL?root->left:root->right; return pathsum(t,all+root->val,sum); }else{ return pathsum(root->left,all+root->val,sum)||pathsum(root->right,all+root->val,sum); } } bool hasPathSum(TreeNode* root, int sum) { if(!root) return false; return pathsum(root,0,sum); }};
对上面做改进。这里主要就是针对某个节点只有一个左/右节点该怎么处理。
上面做法是,如果碰到只有一个子节点,则将那个子节点传下去;
下面的做法是,如果碰到空了(只有一个子节点,则另一个子节点就是为空,),那么这个分叉不属于一条路径,则直接置false。
因为只有到叶子节点(左右都为空),才算一条路径。
/** * 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 pathsum(TreeNode* root, int all, int sum){ if(root==NULL) return false; if(root->left== NULL && root->right == NULL){ if(all+root->val == sum) return true; else return false; } return pathsum(root->left,all+root->val,sum)||pathsum(root->right,all+root->val,sum); } bool hasPathSum(TreeNode* root, int sum) { if(!root) return false; return pathsum(root,0,sum); }};
2.别人的解法(递归)
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); }
0 0
- Path Sum 路径和(注:同时包含得到各个路径的模板:两种不同表达形式的代码)
- 得到swf路径的两种方法
- 树的最大路径和 Binary Tree Maximum Path Sum
- Path Sum 是否存在特定和的路径
- Path Sum II 计算节点和符合条件的路径
- Path Sum II --路径和(重)
- LeetCode | Path Sum(路径和)
- LeetCode 112. Path Sum(路径和)
- Minimum Path Sum 最小值的路径
- LeetCode Path Sum 路径和
- Path Sum--路径和(重)
- [LeetCode] 路径和 Path Sum
- leetcode Path Sum 路径和
- [Leetcode]113. Path Sum II 求路径和一个数的所有路径
- Binary Tree Maximum Path Sum (二叉树路径和的最大值) 【leetcode】
- 树-Path Sum II(指定和,求根到叶子的路径)
- Tree-----找出和等于给定数字的所有路径(113. Path Sum II)
- 437. Path Sum III(二叉树的路径和之三)
- leetcode 88--Merge Sorted Array 数组 合并 双指针
- Redis实现关注关系
- win64 安装sql server 2008R2时报错“检查到visual studio2008 版本”的解决办法
- 稳压电路之5V到3.3V的几种电源方案
- Java 设计模式(八) Proxy(代理)模式及Spring引申
- Path Sum 路径和(注:同时包含得到各个路径的模板:两种不同表达形式的代码)
- 使用脚本和定时任务自动备份管理服务器
- iOS post上传图片
- C++第五次实验
- 第十周-阅读程序
- qemu raw 文件的复制、迁移
- Linux系统编程-文件IO函数
- 多态问题
- 消息队列-metaq