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--二叉树中和为某一值的路径的更多相关文章

  1. 剑指offer 25:二叉树中和为某一值的路径

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  2. 剑指offer系列33-----把二叉树打印成多行

    [题目]从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 方法一:直接打印 package com.exe7.offer; import java.util.LinkedList; i ...

  3. 剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历

    /* 题目: 输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径. */ /* 思路: 先序遍历,深度遍历. 从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出. 回 ...

  4. 剑指offer 二叉树中和为某一个值的路径

    剑指offer 牛客网 二叉树中和为某一个值的路径 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 15:53:58 2 ...

  5. 剑指Offer - 九度1368 - 二叉树中和为某一值的路径

    剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...

  6. 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

    题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...

  7. 剑指Offer(二十四):二叉树中和为某一值的路径

    剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  8. 剑指 Offer 34. 二叉树中和为某一值的路径

    剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...

  9. 剑指Offer:二叉树中和为某一值的路径【34】

    剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...

随机推荐

  1. UVa 10900 - So you want to be a 2n-aire?

    题目大意: 一个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏,获得当前奖金:回答下一道问题,答对的概率p在t到 ...

  2. Codeforces Round #277 (Div. 2) A B C 水 模拟 贪心

    A. Calculating Function time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. HDU 5748 最长上升子序列的长度nlogn(固定尾部)

    Bellovin Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  4. easyUI分页显示

    struts2: http://www.cnblogs.com/huozhicheng/archive/2011/09/27/2193605.html springMVC http://blog.cs ...

  5. SpringMVC List绑定

    需求:成绩录入(录入多门课成绩,批量提交) 使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性 public class ItemsQu ...

  6. ubuntu14.04 and ros indigo install kinect driver--16

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 今日多次测设ros indigo install kinect driver ,提示各种失败,然 ...

  7. 在线QQ客服 生成

    很简单,分为个人QQ和企业QQ: 一:企业QQ代码: http://crm2.qq.com/page/portalpage/wpa.php?uin=123456&aty=1&a=0&a ...

  8. [转]ssh常用用法小结

    ssh常用用法小结 1.连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机, ...

  9. Floating Action Button(漂浮按钮)

    参考:http://blog.csdn.net/pengkv/article/details/46427891 效果图: 步骤一: 在build.gradle添加以下代码,导入包 dependenci ...

  10. 【转】DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10

    [转]DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10 分类: Linux 由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至 ...