- 浏览: 303288 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
stamina:
请问这个装在svn的客户端吗?我试了,发现命令“ava -ja ...
statsvn 统计svn代码量 -
在世界的中心呼喚愛:
不错,找到方法!!
利用Jackson对Object,Map,List,数组,枚举,日期类等转化为json -
lg5414:
已经不错了
OutOfMemoryError: unable to create new native thread -
liubey:
这个年代的项目编码还有用latin1的,是个坑啊 蛤蛤
ubuntu下maven构建工程中文乱码 -
wp0615032:
因为那个timestamp是一个乐观锁,每次更新时这个填要带上 ...
hibernate异常 org.hibernate.StaleObjectStateException: Row was updated or deleted
接上一篇,昨天一朋友问我java中怎么实现多叉树的遍历,想了半天都没想出来,写了二叉的遍历之后,发现多叉也一样的,而且java提供的容器类很方便,比c语言里处理指针方便多了。
我手工构造了一颗多叉树。然后再递归遍历。类似于中序遍历吧。
树的节点类:
package TestTwo; import java.util.ArrayList; import java.util.List; //多叉树的节点 public class ManyTreeNode { //节点的内容 private NodeBean data ; //节点列表 private List<ManyTreeNode> childList; //构造函数 public ManyTreeNode(){ data = new NodeBean(); childList = new ArrayList<ManyTreeNode>(); } //构造函数 可以指定key的值 public ManyTreeNode(int key){ data = new NodeBean(); data.setKey(key); childList = new ArrayList<ManyTreeNode>(); } }
多叉树类:
package TestTwo; //多叉树 public class ManyNodeTree { //树根 private ManyTreeNode root; //构造函数 public ManyNodeTree(){ root = new ManyTreeNode(); root.getData().setNodeName("root"); } //构造函数 public ManyNodeTree(int key){ root = new ManyTreeNode(); root.getData().setKey(key); root.getData().setNodeName("root"); } //遍历多叉树 public String iteratorTree(ManyTreeNode treeNode){ StringBuilder sb = new StringBuilder(); if (treeNode != null) { if ("root".equals(treeNode.getData().getNodeName())) { sb.append(treeNode.getData().getKey() + ","); } for (ManyTreeNode index : treeNode.getChildList()) { sb.append(index.getData().getKey() + ","); if (index.getChildList() != null && index.getChildList().size() > 0 ) { sb.append(iteratorTree(index)); } } } return sb.toString(); } //构造多叉树 public static ManyNodeTree createTree(){ //用构造函数指定根节点的值 ManyNodeTree tree = new ManyNodeTree(60); //第一层的节点 ManyTreeNode node1 = new ManyTreeNode(40); ManyTreeNode node2 = new ManyTreeNode(50); ManyTreeNode node3 = new ManyTreeNode(30); tree.getRoot().getChildList().add(0, node1); tree.getRoot().getChildList().add(1, node2); tree.getRoot().getChildList().add(2, node3); //第二层的节点 ManyTreeNode node21 = new ManyTreeNode(85); ManyTreeNode node22 = new ManyTreeNode(70); ManyTreeNode node23 = new ManyTreeNode(15); ManyTreeNode node24 = new ManyTreeNode(102); ManyTreeNode node25 = new ManyTreeNode(83); ManyTreeNode node26 = new ManyTreeNode(9); tree.getRoot().getChildList().get(0).getChildList().add(0,node21); tree.getRoot().getChildList().get(0).getChildList().add(1,node22); tree.getRoot().getChildList().get(0).getChildList().add(2,node23); tree.getRoot().getChildList().get(1).getChildList().add(0,node24); tree.getRoot().getChildList().get(1).getChildList().add(1,node25); tree.getRoot().getChildList().get(2).getChildList().add(0,node26); //第二层的节点 ManyTreeNode node31 = new ManyTreeNode(15); ManyTreeNode node32 = new ManyTreeNode(20); ManyTreeNode node33 = new ManyTreeNode(100); ManyTreeNode node44 = new ManyTreeNode(60); tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(0,node31); tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(1,node32); tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(2,node33); tree.getRoot().getChildList().get(0).getChildList().get(2).getChildList().add(0,node44); return tree; } /** * @param args */ public static void main(String[] args) { ManyNodeTree testTree = ManyNodeTree.createTree(); String result = testTree.iteratorTree(testTree.getRoot()); System.out.println(result); } } NodeBean类 public class NodeBean { private int key; private String nodeName; public String getNodeName() { return nodeName; } public void setNodeName(String nodeName) { this.nodeName = nodeName; } public int getKey() { return key; } public void setKey(int key) { this.key = key; } }
省略了get,set方法。
图传上去不怎么清楚。
遍历的结果:60,40,85,15,20,100,70,15,60,50,102,83,30,9,
评论
4 楼
elan1986
2012-01-17
很不错,谢谢了!
3 楼
guanque
2010-11-16
能把多叉树遍历的完整代码发一下吗
2 楼
guanque
2010-11-16
能把get和set方法也提供出来吗
1 楼
yangguo
2010-07-27
不错,这个应该是先序遍历。
发表评论
-
test
2015-12-23 11:21 0test test test testtest te ... -
java.net.UnknownHostException
2013-11-22 16:22 0服务器上tomcat启动时,报如下错误: 15:2 ... -
OutOfMemoryError: unable to create new native thread
2013-11-20 15:49 3084当看到这个错误时,第一感觉是创建的线程太多了、 ... -
ibatis配置log4j输出sql
2013-06-04 11:53 0不输出httpclient请求头信息: log4j. ... -
命令行编译 运行java程序
2013-05-23 14:13 0lucene的demo代码,需要在命令行下运行,折腾了半会, ... -
GraphicsMagick和im4java按比例压缩图片
2013-04-22 19:26 83261.先安装libpng-1.6.2rc02.tar.gz( ... -
服务器上某应用cpu一直100%问题记录
2013-04-18 21:35 5059jstack 31066 |grep 'nid=79 ... -
jvisualvm远程监控tomcat
2013-11-20 14:02 1385在tomcat的catalina.sh中的JAVA_OPT ... -
计算byte表示的二进制数据中,1出现的次数
2011-11-29 12:55 1515无意中看到这个题目,开始想到的是把byte的二进制数据转为一个 ... -
eclipse下的gc.log记录
2011-07-06 08:06 1517eclipse下的gc.log记录: 6.784: [G ... -
利用Jackson对Object,Map,List,数组,枚举,日期类等转化为json
2011-05-18 22:43 50756利用Jackson中的ObjectMapper对象,转为对象为 ... -
设计模式 代理模式(静态代理)
2011-04-08 09:05 1233代理模式的作用:为其他对象提供代理以控制对这个对象的访问. ... -
alipay 电面记录
2011-04-06 21:10 14521. 网站压力测试 2.jvm 调优,jvm内存管理,垃圾收集 ... -
PermGen space 溢出 使用jstat查看 Permsize 占用情况 并设置 PermSize和MaxPermSize
2011-03-02 11:38 17747网站以前经常java.lang.OutOfMemoryErro ... -
Collection接口的remove和List接口的remove的差别
2011-02-25 21:00 1865刚看书上一段代码,觉得输出的结果有点奇怪,查看了jdk的api ... -
tomcat6 中get 和 post 表单提交时编码的差别
2011-01-13 22:30 4330相信搞java的朋友都 ... -
struts2 报错时不进入 指定的500页面的原因
2010-12-15 13:34 5012折腾好些天了,我们项目用的web框架是struts2,具体那 ... -
jquery请求 返回json格式数据
2010-07-26 15:03 1619这个问题应该是常识性问题,可我还是不是很明白。 在前台用jqu ... -
java ant maven windows下 环境变量
2010-07-13 10:37 1303要运行springside,安装ant,maven是必需的。 ... -
java 工程再次无法编译
2010-06-03 09:38 1251以前遇到这种工程无法编译的情况,无非删掉class文件,重启i ...
相关推荐
本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,我们需要定义一个多叉树节点类。这个类通常包含一个数据字段来存储节点值,以及一个ArrayList或LinkedList等动态数组来存储子节点。以下是一个...
用递归和堆栈两种方法对树分别进行前中后序的遍历
在Java编程中,多叉树是一种非线性的数据结构,它由节点(或称为顶点)和连接这些节点的边组成。与二叉树不同,每个节点在多叉树中可以有任意数量的子节点,而不仅仅局限于两个。在本项目中,我们不仅实现了基本的...
在Java编程中,多叉树是一种非线性的数据结构,其中每个节点可以有多个子节点。这个给定的代码实现了一个简单的多叉树结构,主要包含节点类`TreeNode`,用于构建树形结构并进行查找操作。以下是这个实现的关键知识点...
在Java中遍历MySQL数据库中的树形结构是一项常见的任务,尤其是在处理组织结构、文件系统或任何具有层次关系的数据时。本文将深入探讨如何利用Java语言和MySQL数据库来实现这一功能,解析给定代码片段,并提供一种...
在IT领域,二叉树和多叉树是数据结构中的重要组成部分,它们广泛应用于各种算法设计和程序实现中。在这个“BST.rar_二叉树_多叉树”压缩包中,我们可以推测它包含了关于二叉搜索树(Binary Search Tree, BST)的相关...
为了实现无限级树形菜单,首先需要将数据库中的层次数据转化为内存多叉树,然后通过遍历算法将这个多叉树转换为JSON格式。具体步骤如下: - **读取层次数据**:使用数据库查询语句获取组织结构数据,这些数据通常...
在Java中,可以使用递归实现,如上文的`preOrder()`函数所示,首先访问根节点,然后递归地遍历左子树和右子树。 2. 中序遍历:遵循“左-根-右”的顺序。`midOrder()`函数展示了这个过程,先遍历左子树,然后访问根...
`DOM`解析器将整个XML文档加载到内存中,形成一个树形结构,便于遍历和操作;而`SAX`解析器则采用事件驱动的方式,逐个处理XML元素,对内存要求较低,适合处理大型XML文件。在这个项目中,由于树形菜单可能包含多层...
java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
多叉树的基本操作包括添加、遍历和移除节点。 1. 添加节点: ```javascript function add(data, toData, traversal) { let node = new Node(data); if (this._root === null) { this._root = node; return ...
对于更复杂的树结构,如多叉树或自定义的树类型,开发者需要自己实现相关的方法,如添加子节点、删除子节点、遍历树(深度优先搜索DFS或广度优先搜索BFS)等。这些操作通常涉及递归或栈/队列的使用。 在处理树形...
在Java中,树型结构主要由两种类型实现:二叉树和多叉树。二叉树是最简单的一种,每个节点最多有两个子节点,分为左子节点和右子节点。二叉树的特殊形式有完全二叉树和满二叉树。多叉树则允许每个节点有三个以上的子...
节点可能有两个子节点(对于二叉树)或者任意数量的子节点(对于多叉树)。类的结构可能如下: ```java public class Node<T> { private T value; private List<Node<T>> children; public Node(T value) { ...
对于复杂的数据结构,如多叉树,我们可能需要自定义更复杂的遍历策略。此外,还有一些特定类型的树,如平衡二叉树(AVL树、红黑树等),它们保持了特定的平衡条件,以确保操作(如查找、插入和删除)的性能。 在...
- 扩展知识,如多叉树的层次遍历等。 这个资源可能还会涉及到如何通过图形化工具(如Graphviz)绘制二叉树,以便更好地理解和展示层序遍历的过程。 总之,二叉树层序遍历是一个重要的数据结构和算法主题,对于理解...
Java标准库没有内置树类,但可以使用自定义类来实现二叉树或多叉树。 6. **类与对象的创建与继承** `如何重写方法构造自己的类自定义类MyButton.java`强调了Java中的类定义和对象实例化,以及如何通过继承来扩展已...
节点遍历是数据结构与算法中的一个重要概念,尤其是在处理树形数据结构时,如二叉树、多叉树等。在这里,我们主要讨论两种常见的遍历方法:前序遍历、中序遍历和后序遍历。 1. **前序遍历**:在二叉树的前序遍历中...
这种方法适用于任意数量子节点的树结构,如多叉树。详细实现可参考“算法5-1子结点链表法建立树算法.txt”。 5. **树的层次遍历** - 层次遍历也称为广度优先遍历,从根节点开始,按层次逐层访问所有节点。常用的...
9. 树(Tree):二叉树和多叉树是常见的树数据结构,如二叉搜索树(Binary Search Tree)、红黑树(Red-Black Tree)。Java的TreeSet、TreeMap等类内部使用了红黑树,保证了操作的性能。 10. 图(Graph):图由顶点...