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. Asp.net 执行回调操作后 无法更新ViewState的问题

    源码 待续...

  2. linux,下载与安装

    1.下载地址 1.网易开源镜像站 http://mirrors.163.com 2.centos 官方站 http://www.centos.org 2.虚拟机 VirtualBox  ------- ...

  3. python 函数性能分析

    1 使用profile分析函数性能示例1, 以profile为例: import profile def profileTest(): Total =1; for i in range(10): To ...

  4. install usb serial

    Install driver for USB-UART bridge converter on Linux Ubuntu12.04 Ubuntu下USB转串口芯片驱动程序安装,支持cp210x,pl2 ...

  5. WinMain初始化详细过程以及消息循环

    主要内容:详细介绍WinMain函数的初始化过程以及消息循环 1.窗口类定义 通过给窗口类数据结构WNDCLASS赋值完成, 该数据结构中包含窗口类的各种属性 <1>LoadIcon 作用 ...

  6. HDU 1010 Tempter of the Bone --- DFS

    HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...

  7. html-javascript前端页面刷新重载的方法汇总

    记得我在兴安得力实习要转正的时候,我领导象征性的给我出了一套测试题目,里面就有js闭包和页面刷新等题目.今天把很久之前的测试题目之一,js页面刷新的方法以及页面自动刷新跳转和返回上一页和下一页等方法总 ...

  8. Python 基本语法1

    Python 基础语法(一) Python的特点 1. 简单 Python是一种代表简单思想的语言. 2. 易学 Python有极其简单的语法. 3. 免费.开源 Python是FLOSS(自由/开放 ...

  9. Redis 源码解析

    http://programmers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness- ...

  10. http://www.allthingsdistributed.com

    http://www.allthingsdistributed.com159-6289-2518