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. 【转】java 注释规范

    原则: 1.注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释.如果在其它项目中发现它们的注释规范与这份文档不同,按照这份规范写代码,不要试图在既成的规范系统中引入新的规范. 2 ...

  2. nagios安装配置

     http://www.codeweblog.com/nagios%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/ 上线的服务器有时会被人攻击,导致服务不可用,今天安装配置了 ...

  3. Kubuntu麦克风音频无声音

    前段时间买了新本,装了双系统,win8和kubuntu 14.04,使用的过程感觉都不错,因为平时玩游戏看视频是用win8,但最近打算在kubuntu上听音乐时,发现音频没有声音,麦克风也没有声音,这 ...

  4. Alice and Bob

    类似于石子合并的游戏,在黑板上写下N个数,每次只能将其中的一个数减1(结果为0自动消去),或者将某两个数消去,将其和写在黑板上. Alice先手,彼此都采用最优策略,将最后一个数消去者获胜. 思路:设 ...

  5. 关于环境变量PATH的几点注意事项

    查看执行文件路径变量PATH的内容可用echo $PATH.echo表示显示打印之意,$表示后接的是变量. 如下图所示,其中每个目录中间用冒号(:)来隔开,每个目录是有顺序之分的: 如果预修改PATH ...

  6. 112. Path Sum

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  7. 记录几种有关libsvm格式数据的list和dict用法

    # list元素求和 sum = reduce(lambda x,y: x+y, mylist) # 比较两个 lists 的元素是否完全一致 if all(x==y for x, y in zip( ...

  8. ✡ leetcode 156. Binary Tree Upside Down 旋转树 --------- java

    156. Binary Tree Upside Down Add to List QuestionEditorial Solution My Submissions   Total Accepted: ...

  9. POJ 1195 Mobile phones(二维树状数组)

                                                                  Mobile phones Time Limit: 5000MS   Mem ...

  10. MySQL性能参数详解 - max_connect_errors

    max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况.max_connect_errors的值与性能并无太大关系. 默认情 ...