Path Sum 一个树里边,看看有没有一条路径上边的和等于给定的数
来源:互联网 发布:淘宝主播逢丁吉吉 编辑:程序博客网 时间:2024/05/01 05:30
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.
出处:http://blog.csdn.net/aresgod/article/details/39400643
用到了递归(递归我还是不会用啊,伤心)
下边人家这个写法很巧妙的一点就是,没有去累加,而是每走一步,就去判断给定的sum与这个节点的数值相不相等,等于返回,不等于时,把两者的差作为下一步递归的sum
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
return pathExist(root,sum);
}
private boolean pathExist(TreeNode Node,int sum){
if(Node==null) return false;
if(Node.left==null && Node.right==null) return(sum==Node.val);
else return(pathExist(Node.left,sum-Node.val) || pathExist(Node.right,sum-Node.val));
}
}
下边的出处:http://www.cnblogs.com/springfor/p/3879825.html?utm_source=tuicool&utm_medium=referral
你看看,比上边的简洁了不少吧,明明自己都可以递归,上边非要自定义一个函数
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null) return false;
if(root.left==null && root.right==null) return(sum==root.val);
else return(hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val));
}
}
下边的这个是中规中矩的写法,没有用到递归,但是很值得一看。
For the tree above, the queue would be: 5 - 4 - 8 - 11 - 13 - 4 - 7 - 2 - 1. It will check node 13, 7, 2 and 1. This is a typical breadth first search(BFS) problem.
想一想为什么会用LinkedList,看一看TreeNode。LinkedList里边的poll会返回List的头节点,并且会删除该节点,因为是头节点,所以实现了breadth first search(BFS)即横向优先搜索(广度优先搜索),按着程序走一遍流程,便很清楚了
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null) return false;
LinkedList<TreeNode> node=new LinkedList<TreeNode>();
LinkedList<Integer> sumval=new LinkedList<Integer>();
node.add(root);
sumval.add(root.val);
while(!node.isEmpty()){ //判断的是链表是否为空
TreeNode getnode=node.poll(); //用poll得到链表的头节点,实现广度优先搜索
int getval=sumval.poll();
if(getnode.left==null && getnode.right==null && getval==sum) return true;
if(getnode.left!=null){
node.add(getnode.left);
sumval.add(getval+getnode.left.val);
}
if(getnode.right!=null){
node.add(getnode.right);
sumval.add(getval+getnode.right.val);
}
}
return false;
}
}
- Path Sum 一个树里边,看看有没有一条路径上边的和等于给定的数
- Tree-----找出和等于给定数字的所有路径(113. Path Sum II)
- Leetcode:112. Path Sum (求Tree中是否存在路径的和等于给定值)
- 437. Path Sum III--dfs + hash + 连续序列的和等于给定的数num
- 判断一个有序数组中是否有两个数的和等于给定的数
- [LeetCode]437. Path Sum III(求二叉树中路径和等于sum的数量)
- 给定一棵二叉树,和一个数值。求二叉树的路径和等于给定值的所有路径
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
- [Leetcode]113. Path Sum II 求路径和一个数的所有路径
- 一个无序数组中两个数之和等于给定的值sum
- LeetCode(Binary Tree Maximum Path Sum) 在二叉树中找出一条和最大的路径
- 查看一颗二叉树从根到叶子路径的节点和是否等于某个给定的数
- 关于一个数组中两个数的和等于给定数的问题
- 在数组中求出两个数,使他们的和等于给定的一个数
- [LeetCode]113. Path Sum II(列出二叉树根到叶路径和等于sum的所有路径)
- 判断集合中是否有两个数的和等于某个给定整数
- SVN使用
- css_selector的相关匹配问题
- Linux 监控日志文件
- 如何通过本地电脑连接windows和linux服务器
- [从头学数学] 第28节 数据收集整理
- Path Sum 一个树里边,看看有没有一条路径上边的和等于给定的数
- 最终--VC中MFC如何显示位图(拉伸以及非拉伸)
- 找到一款不错的网站压力测试工具webbench[转载]
- 关于JVM
- vtune打开图形界面
- Linux网络套接字
- 用CSS验证页面元素--MatchesSelector API
- ANDROID SHAPE画圆形背景_ANDROID实现角标布局
- Linux-查看系统版本信息