java 遍历树节点 同时保留所有的从根到叶节点的路径
直接在代码。稍后细说
数据结构定义:
/**
*
*/
package Servlet; import java.util.ArrayList;
import java.util.List; /**
* @author lei
*
*/
public class node {
private String text;
private List<node>childList;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List<node> getChildList() {
return childList;
}
public void setChildList(List<node> childList) {
this.childList = childList;
}
public static node getInitNode()
{
node nodeA=new node();
nodeA.setText("A");
node nodeB=new node();
nodeB.setText("B");
node nodeC=new node();
nodeC.setText("C");
node nodeD=new node();
nodeD.setText("D");
node nodeE=new node();
nodeE.setText("E"); List<node>lstB=new ArrayList();
lstB.add(nodeC);
lstB.add(nodeD);
nodeB.setChildList(lstB); List<node>lstA=new ArrayList();
lstA.add(nodeB);
lstA.add(nodeE);
nodeA.setChildList(lstA);
return nodeA; }
}
遍历并保存路径
/**
*
*/
package Servlet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
/**
* @author lei
*
*/
public class IteratorNodeTool {
Map<String,List> pathMap=new HashMap();//记录全部从根节点到叶子结点的路径
private void print(List lst)//打印出路径
{
Iterator it=lst.iterator();
while(it.hasNext())
{
node n=(node)it.next();
System.out.print(n.getText()+"-");
}
System.out.println();
}
public void iteratorNode(node n,Stack<node> pathstack)
{
pathstack.push(n);//入栈
List childlist=n.getChildList();
if(childlist==null)//没有孩子 说明是叶子结点
{
List lst=new ArrayList();
Iterator stackIt=pathstack.iterator();
while(stackIt.hasNext())
{
lst.add(stackIt.next()); }
print(lst);//打印路径
pathMap.put(n.getText(), lst);//保存路径信息
return;
}else
{
Iterator it=childlist.iterator();
while(it.hasNext())
{
node child=(node)it.next();
iteratorNode(child,pathstack);//深度优先 进入递归
pathstack.pop();//回溯时候出栈
} } }
public static void main(String[] args) {
Stack <node>pathstack=new Stack();
node n=node.getInitNode();
IteratorNodeTool tool=new IteratorNodeTool();
tool.iteratorNode(n, pathstack);
} }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
java 遍历树节点 同时保留所有的从根到叶节点的路径的更多相关文章
- java遍历树(深度遍历和广度遍历
java遍历树如现有以下一颗树:A B B1 B11 B2 B22 C C ...
- [LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- Java遍历树(深度优先+广度优先)
在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程.现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.深度优先 英文缩写为DFS即Dep ...
- [LeetCode] 129. Sum Root to Leaf Numbers 求根到叶节点数字之和
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- <Interview Problem>二叉树根到叶节点求和值匹配
题目大意:一颗二叉树,每个节点都有一个Value, 判断根节点到叶节点的路径求和值是否等于某个数Sum. 比如说如下这样一颗二叉树,76是45,21,10这条路径的求和值,77就没有满足条件的路径. ...
- [Leetcode] Sum root to leaf numbers求根到叶节点的数字之和
Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number. ...
- C语言递归之求根到叶节点数字之和
题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...
- 树——sum-root-to-leaf-numbers(根到叶节点数字之和)
问题: Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a numb ...
- LeetCode OJ:Sum Root to Leaf Numbers(根到叶节点数字之和)
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
随机推荐
- 图画(txt等一下)实施开放的默认下载的默认浏览器,而不是(Java文本)
在网络上,假设我们超链接地址对应于jpg档,txt档,点击链接,默认浏览器打开这些文件,而不是下载,那么,你如何实现竞争力的默认下载. 1.可通过自己写一个download.jsp来实现 <%@ ...
- 一个带动画的页面底部的TabBar的实现
有时有这样一个需求,页面底部有几个图标能够点击,假设一个screenWidth显示不下这些图标,则这一列图标最后一个是more,点击more,能够通过动画展示两列图标 这样来增加layout中: &l ...
- Linux内核IP层的报文处理流程(一)
本文主要讲解了Linux内核IP层的整体架构和对从网卡接受的报文处理流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linxu内核中IP整体实现架构和对网卡 ...
- Oracle SQL Lesson (4) - 使用转换函数和条件表达式
隐式转换select * from emp where empno='7788'字符(char,varchar2)转换为数字(number)或日期(date)数字或日期转换为字符 显式转换字符转换为数 ...
- 大爱jQuery,10美女模特有用jQuery/CSS3插入(集成点免费下载)
整合下载地址:http://download.csdn.net/detail/yangwei19680827/7343001 jQuery真的是一款非常犀利的Javascript框架,利用jQuery ...
- Linux如何用QQ?Linux下QQ使用的几种方案
在linux下如何使用QQ?在ubuntu11.10中如何使用QQ?或许有初涉linux的人这样问,我们可以看看ubuntusoft总结出来的几种在linux系统下用QQ的方法.前面的几种主要的方法都 ...
- 新书《iOS8 Swift编程指南》货架
颐和园的新书出版. 链接:http://www.amazon.cn/dp/B00YOQSYAO 这本书从去年开始7可能开始写.今年1完成这个月的第一稿,经过多次修改,今天,最后的正式出版,欢迎大家指正 ...
- 牟大哥:《App自我促销》连载2
直立人迁移走
[谋哥每天一干货,第六十九篇] 前篇说到声音在远古时代.是一个奇妙的东西,它可以非常快地把信息传播到其它地方,突破了短距离. 然而能人的后代直立人学会了直立行走,他们開始走出非洲,到达遥远的中东.中国 ...
- Silverlight之 xaml布局
目标:在两周内完成一个界面的功能 第1阶段:完成xaml的布局 准备:视频4-14节 第2阶段: 完成环状图 柱状图 TreeView样式 准备: 矢量绘图 telerik 自定义控件 自定义控件 ...
- Java代码检查工具
FindBugs:不注重样式和格式,重视真正的缺陷和潜在的性能问题,,基于Bug Patterns,在不运行的情况下检查字节码代码质量. Jalopy:Java源代码格式化工具,可自定义规则. PMD ...