- 浏览: 284502 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
CodeLove:
如果包含<,(,)...等特殊字符呢
Python变量名检测 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,只能算是 2、8、10、16 几 ...
java实现的任意进制转换 -
mychaoyue2011:
在本地执行了几遍,结果都是:s2开始休眠s1开始休眠s2休眠结 ...
Java线程学习笔记(四)线程join -
chxiaowu:
不错!
Java版的树 -
TenAclock:
这个例子 做不到“学生都交完” 考试结束,只能做到等到考试时间 ...
Java线程学习笔记(十一) DelayQueue的应用
用java实现的树,
先定义一个树的接口,暂时只有两个基本方法,
package com.woxiaoe.collection.tree; /** * 书接口 * @author 小e * * 2010-4-8 下午08:04:09 */ public interface Tree<T> extends Iterable<T> { /** * 深度 * @return */ public int depth(); /** * 叶子节点数 * @return */ public int leafCount(); }
接着定义一个树节点针对二叉树
package com.woxiaoe.collection.tree; /** * 树节点 * @author 小e * * 2010-4-8 下午08:06:04 */ public class Tnode<T>{ private Tnode<T> left; private Tnode<T> right; private T value; public Tnode(T value) { this.value = value; } public Tnode(T value, Tnode<T> left, Tnode<T> right){ this.value = value; this.left = left; this.right = right; } public Tnode<T> getLeft() { return left; } public void setLeft(Tnode<T> left) { this.left = left; } public Tnode<T> getRight() { return right; } public void setRight(Tnode<T> right) { this.right = right; } public T getValue() { return value; } public void setValue(T value) { this.value = value; } }
二叉树
package com.woxiaoe.collection.tree; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Stack; /** * 二叉树 * @author 小e * * 2010-4-8 下午08:04:53 */ public class BinaryTree<T> implements Tree<T> { private Tnode<T> root;//根结点 public BinaryTree() { root = null; } public BinaryTree(Tnode<T> root){ this.root = root; } public Tnode<T> getRoot() { return root; } public void setRoot(Tnode<T> root) { this.root = root; } @Override public int depth() { return depth(root); } @Override public int leafCount() { return leafCount(root); } private int depth(Tnode<T> node) { if(node == null){ return -1; } int leftHeight = depth(node.getLeft()); int rightHeight = depth(node.getRight()); return 1 + (leftHeight > rightHeight?leftHeight:rightHeight); } private int leafCount(Tnode<T> node){ if(node.getLeft() == null && node.getLeft() == null){ return 1; } return leafCount(node.getLeft()) + leafCount(node.getRight()); } @Override public Iterator<T> iterator() { return new InorderIterator(); } private class InorderIterator implements Iterator<T>{ private Stack<Tnode<T>> s ; Tnode<T> curr; public InorderIterator() { s = new Stack<Tnode<T>>(); curr = getFarLeft(root); } @Override public boolean hasNext() { return curr != null; } @Override public T next() { if(curr == null){ throw new NoSuchElementException("没有节点"); } T value = curr.getValue(); if(curr.getRight() != null){ curr = getFarLeft(curr.getRight()); }else if(!s.isEmpty()){ curr = s.pop(); }else{ curr = null; } return value; } @Override public void remove() { throw new RuntimeException("不支持该方法"); } /** * 得到右子树最远的有节点 * @return */ private Tnode<T> getFarLeft(Tnode<T> node){ if(node == null){ return null; } while(node.getLeft() != null){ s.push(node); node = node.getLeft(); } return node; } } }
以下为测试代码
package com.woxiaoe.collection.tree; import java.util.Iterator; import junit.framework.TestCase; public class TreeTest extends TestCase { BinaryTree tree = new BinaryTree(); @Override protected void setUp() throws Exception { Tnode<String> root = new Tnode<String>("root"); Tnode<String> a = new Tnode<String>("a"); Tnode<String> b = new Tnode<String>("b"); Tnode<String> c = new Tnode<String>("c"); Tnode<String> d = new Tnode<String>("d"); a.setLeft(b); a.setRight(c); root.setLeft(a); root.setRight(d); tree.setRoot(root); } public void testTree(){ System.out.println("tree height:" + tree.depth()); System.out.println("leaf node:" + tree.leafCount()); System.out.println("先序排列"); NLR(tree.getRoot()); System.out.println("中序排列"); LNR(tree.getRoot()); System.out.println("后序排列"); LRN(tree.getRoot()); System.out.println("测试遍历"); for (Iterator iterator = tree.iterator(); iterator.hasNext();) { String nodeValue = (String) iterator.next(); System.out.print(nodeValue + " "); } } /** * 先序排列 * @param node */ public void NLR(Tnode node){ if(node == null){ return; } visit(node); NLR(node.getLeft()); NLR(node.getRight()); } /** * 中序排列 * @param node */ public void LNR(Tnode node){ if(node == null){ return; } LNR(node.getLeft()); visit(node); LNR(node.getRight()); } /** * 后序排列 * @param node */ public void LRN(Tnode node){ if(node == null){ return; } LRN(node.getLeft()); LRN(node.getRight()); visit(node); } public void visit(Tnode node){ System.out.println(node.getValue()); } @SuppressWarnings("unchecked") public void testIterator(){ for (Iterator iterator = tree.iterator(); iterator.hasNext();) { String str = (String) iterator.next(); System.out.print(str + " "); } } }
Output
tree height:2
leaf node:3
先序排列
root
a
b
c
d
中序排列
b
a
c
root
d
后序排列
b
c
a
d
root
测试遍历
b a c root d b a c root d
发表评论
-
Consider the following code: What will be printed?
2010-09-24 20:30 985Consider the following code: Wh ... -
Java 基础复习笔记一
2010-06-04 02:03 1152这两天复习java的基础知识,把一些自己认为比较有用的点记录下 ... -
Java 转义字符
2010-06-03 21:21 1022\n 回车(\u000a) \t 水平制表符(\u0009) ... -
生产消费者的模拟
2010-05-27 23:16 1719采用Java 多线程技术,设计实现一个符合生产者和消费者问题的 ... -
Java 控制台下显示文件结构
2010-05-27 00:10 3283题目: 编写一个Java ... -
Java得到类目录
2010-05-26 23:22 1197String path = MainTest.class.ge ... -
Java文件压缩
2010-05-23 21:54 1241package com.woxiaoe.study.io ... -
UDP传输图片的尝试
2010-05-22 18:05 9863UDP是不可靠的,发送的数据不一定会到达,且顺序不一定 ... -
【转载】Java String.Format() 方法及参数说明
2010-05-15 22:18 1346JDK1.5中,String类新增了一个很有用的静态方法S ... -
【转载】String.format函数使用方法介绍
2010-05-15 22:17 1221http://edu.codepub.com/2009/111 ... -
Java线程学习笔记(十一) DelayQueue的应用
2010-05-01 00:34 15735DelayQueue 是一个无界的BlockingQueue ... -
Java线程学习笔记(十)CountDownLatch 和CyclicBarrier
2010-04-30 21:04 2877CountDownLatch : 一个同步辅助类,在完成一组 ... -
Java线程学习笔记(九)生产者消费者问题
2010-04-29 22:27 1752用多线程来模拟生产者消费者问题。用到BlockingQueue ... -
Java线程学习笔记(八)线程之间的协作
2010-04-26 23:13 1865wait()与notifyAll() 调用sleep ... -
Java线程学习笔记(七)java中递增不是原子性
2010-04-24 23:00 2940以下为测试代码,通过一个自增函数得到最新的值,玩Set你存,看 ... -
Java线程学习笔记(六)在其他对象上同步
2010-04-24 22:47 1380package com.woxiaoe.study.threa ... -
Java线程学习笔记(五)资源共享问题
2010-04-24 21:04 1297IncreaseClient 中持有一个base,每次调用起i ... -
Java线程学习笔记(四)线程join
2010-04-24 20:06 1317《Java编程思想》的一个例子,如果某个线程在另一个线程t上调 ... -
基于java的图(四) 强连通组件
2010-04-22 21:06 1565有向图中, u可达v不一定意味着v可达u. 相互可达则属于同一 ... -
基于java的图(三) 图的拓扑排序
2010-04-21 16:14 1902相关: 基于java的图的实现 基于java ...
相关推荐
在Java编程中,构建一个能够展示系统目录树结构的控件是常见的需求,尤其是在开发桌面应用或者需要用户浏览文件系统时。"Java目录树控件"的实现涉及到多个技术点,包括文件I/O操作、数据结构和图形用户界面(GUI)...
Java树结构是计算机科学中的一种数据结构,它模拟了自然界中的树形态,通过节点和边来组织数据。在Java编程中,树结构被广泛应用于数据的组织和操作,如文件系统、编译器语法分析、搜索算法等。下面将详细阐述Java树...
Java 菜单树的实现,可以很方便的移植到其他程序,方便使用,而且具有代表性.
在Java编程中,多叉树是一种非线性数据结构,每个节点可以有多个子节点,与二叉树(每个节点最多有两个子节点)相比,它提供了更广泛的灵活性。本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,...
在Java Web开发中,动态树形菜单是一种常见的用户界面元素,尤其在管理系统的导航部分,它能够以层次结构展示数据,使用户能直观地浏览和操作复杂的数据结构。本示例是一个基于Java实现的JSP动态树形菜单功能,旨在...
在Java编程中,树形菜单是一种常见的用户界面元素,它以层次结构展示数据,通常用于文件系统、组织架构或程序功能导航。这个压缩包“treemenu”很可能包含了一个简单的WinFrom应用程序,其中实现了树形菜单的功能。...
java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;
【Java无限级树形菜单实现】 在Web开发中,经常需要构建树形结构来表示层级关系,例如在管理系统中常见的菜单、组织结构等。这里我们讨论如何使用Java、JSP和SSH(Struts、Hibernate、Spring)框架来实现一个无限级...
在Java开发中,动态树形菜单和分页是常见的需求,尤其在构建Web应用程序时,它们对于用户界面的交互性和数据管理的效率至关重要。本文将深入探讨这两个概念以及如何在Java环境中实现它们。 首先,我们来看动态树形...
自己写的一个 用java代码复制树形结构数据的方法 很实用 希望对有需求的朋友给予帮助
本篇文章将深入探讨“树形结构设计”在Java环境下的实现,并结合给出的链接资源——一篇在CSDN博客上的文章(虽然无法直接访问,但我们可以根据描述推测其内容),以及名为“tms”的压缩包文件,来解析相关知识点。...
用JAVa实现 树形目录的显示,有界面
Java 动态树dhtmlxtree是一个用于在Java应用程序中创建交互式树形视图的组件,它基于JavaScript库dhtmlxSuite。dhtmlxtree是用于构建富客户端Web应用的工具,它允许开发者在网页上展示数据结构,提供可折叠、可扩展...
Java圣诞树程序是一种趣味性的编程练习,它利用控制台输出创建出类似圣诞树的图形。在给定的压缩包中,包含三个不同设计的Java源码文件:`ChristmasTreePattern1.java`, `ChristmasTreePattern2.java`, 和 `...
本文将详细解析"java后缀树代码"这个主题,结合提供的文件列表,我们将会深入理解后缀树的实现原理,并探讨如何在Java中构建这种数据结构。 后缀树的核心在于它可以存储一个字符串的所有后缀,并且每个后缀只用一条...
"java树节点逐级汇总.zip"这个压缩包提供的内容,旨在帮助开发者处理无序列表数据,并将其转化为可以逐级汇总的树形结构。下面将详细介绍这个过程中的关键知识点。 1. **树形结构**: - 树形结构是一种非线性的...
从普通Java对象中建立树形结构的过程涉及到算法设计与优化。原始数据通常是扁平化存储的,需要通过特定的算法将其转换为具有层次结构的树形数据。在教师信息系统的基本信息模块中,地址信息的管理是构建树形结构的一...
在Java中实现决策树可以帮助开发者构建预测模型,解决复杂的问题。本教程将详细讲解如何使用Java进行决策树的实现,以及“Demo2”可能涉及的具体内容。 1. **决策树的基本概念** - **决策树结构**:决策树由节点...