剑指offer系列22--二叉树中和为某一值的路径
22【题目】输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
* 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径
* 【思路】只要从根结点到叶结点一条一条遍历;
* 如果到了叶结点,且此路径值跟目标值相同,就添加此路径;
不是,则从孩子子节点开始查找。
【注】叶结点遍历完后要删除此叶结点值直至返回到父节点。
package com.exe5.offer; import java.util.ArrayList; /**
* 22【题目】输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
* 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径
* 【思路】只要从根结点到叶结点一条一条遍历;
* 如果到了叶结点,且此路径值跟目标值相同,就添加此路径;
不是,则从孩子子节点开始查找。
* @author WGS
*
*/
public class FindTreePath { public static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int n){
this.val=n;
}
}
public ArrayList<ArrayList<Integer>> getFindPaths(TreeNode root,int target){
ArrayList<Integer> nodeList=new ArrayList<>();
ArrayList<ArrayList<Integer>> pathList=new ArrayList<>();
if(root==null) return pathList;
int currentSum=0;
return findPaths(pathList,nodeList,root,target,currentSum); }
private ArrayList<ArrayList<Integer>> findPaths(ArrayList<ArrayList<Integer>> pathList, ArrayList<Integer> nodeList,
TreeNode root, int target, int currentSum) { currentSum+=root.val;
nodeList.add(root.val);
//如果是叶结点就判断与目标值是否相同,相同则添加此路径
boolean isLeafNode=root.left==null && root.right==null;
if(currentSum==target && isLeafNode==true){
ArrayList<Integer> tempList=new ArrayList<>();
for(Integer val:nodeList){
tempList.add(val);
}
//循环结束为一条路径,加到pathList
pathList.add(tempList);
}
//如果不是叶结点,则使用递归继续判断左右子节点
if(root.left!=null)
findPaths(pathList, nodeList, root.left, target, currentSum);
if(root.right!=null)
findPaths(pathList, nodeList, root.right, target, currentSum); //遍历到叶结点后,要在返回到父节点之前,在路径上删除当前结点
Integer val2=nodeList.remove(nodeList.size()-1);
currentSum-=val2;
return pathList;
} public static void main(String[] args) {
TreeNode root=new TreeNode(10);
TreeNode node1=new TreeNode(5);
TreeNode node2=new TreeNode(4);
TreeNode node3=new TreeNode(7);
TreeNode node4=new TreeNode(12);
root.left=node1;
root.right=node4;
node1.left=node2;
node1.right=node3; //ArrayList<ArrayList<Integer>> getList=new FindTreePath().getFindPaths(root, 22);
ArrayList<ArrayList<Integer>> getList=new FindTreePath().getFindPaths(null, 0);
System.out.println(getList.size()); for (ArrayList<Integer> list : getList) {
for (Integer integer : list) {
System.out.print(integer+" ");
}
System.out.println();
}
} }
剑指offer系列22--二叉树中和为某一值的路径的更多相关文章
- 剑指offer 25:二叉树中和为某一值的路径
题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- 剑指offer系列33-----把二叉树打印成多行
[题目]从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 方法一:直接打印 package com.exe7.offer; import java.util.LinkedList; i ...
- 剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历
/* 题目: 输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径. */ /* 思路: 先序遍历,深度遍历. 从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出. 回 ...
- 剑指offer 二叉树中和为某一个值的路径
剑指offer 牛客网 二叉树中和为某一个值的路径 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 15:53:58 2 ...
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...
- 剑指Offer(二十四):二叉树中和为某一值的路径
剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...
- 剑指Offer:二叉树中和为某一值的路径【34】
剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...
随机推荐
- java设定窗口步长,依次统计窗口内数值总和
import java.util.Arrays; public class test2 { public static void main(String[] args) { int winSize = ...
- CoreOS Linux available in China
CoreOS Linux 竭诚服务中国用户 今天,我们宣布一个令人振奋的消息 - CoreOS Linux 开源版本正式向中国地区提供服务!国内的用户们现在可以使用安全.自动的 CoreOS Linu ...
- 浅谈github页面域名绑定
来源:http://yanping.me/cn/blog/2011/12/04/github-pages-domain/ 前段时间看到COS上的各位都有博客,也想开个博,给COS的各位管理员发邮件,向 ...
- sprintf 用法
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中 试试下面的代码就知道了 #include<cstdio> #include<cstdlib> using names ...
- 如何让Visual Studio 清除最近打开项目 关闭上次未关闭的标签窗口
删除最近打开的文件: 打开HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\FileMRUList 删除最近打开的项目: 打开HKEY_CUR ...
- c# ICSharpCode.SharpZipLib.Zip实现文件的压缩
首先了解ZipOutPutStream和ZipEntry对象 ZipOutPutStream对象 如果要完成一个文件或文件夹的压缩,则要使用ZipOutputStream类.ZipOutputStre ...
- JavaScript----函数的封装、继承和多态
1.封装:把实现一个功能的代码放在一个函数中封装起来,以后再想实现这个功能的时候,我们不需要重新的编写代码了,只需要执行对应的函数即可,我们把这种机制就称之为"函数的封装"--&g ...
- 根据评分,用js输出评价星星的样式
<b class="starsboxox" data="1"></b> $('.starsboxox').each(function() ...
- hdu1114 Piggy-Bank ——完全背包
link:http://acm.hdu.edu.cn/showproblem.php?pid=1114 只不过求得是最小值.没什么可说的,连我都会做……o(╯□╰)o /* ID: zypz4571 ...
- ZOJ-3929 Deque and Balls (DP+找规律)
题目大意:n个数,每个数的大小都在1~n之间.操作n次,第 i 次将第 i 个数放到一个双端队列里面,放到队列两端的概率是相等的.问操作n次之后双端队列中元素满足xi>xi+1的对数的期望,输出 ...