社区
Java SE
帖子详情
求静态 java tree事例代码
djonlyone001
2009-05-07 04:40:59
就是静态java代码编写的树
...全文
655
4
打赏
收藏
求静态 java tree事例代码
就是静态java代码编写的树
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
djonlyone001
2009-05-08
打赏
举报
回复
还得谢谢大家的回帖啊
djonlyone001
2009-05-08
打赏
举报
回复
[Quote=引用 2 楼 xiaoduan5267 的回复:]
不知道你说的什么意思???JTree??
[/Quote]
我找到了,就是dtree
Miracle1216
2009-05-07
打赏
举报
回复
不知道你说的什么意思???JTree??
scliuqiang
2009-05-07
打赏
举报
回复
给你一个代码(二叉搜索树)比较简单可以自己改改
package test;
/**
* 节点
* @author Administrator
*/
public class Node {
int i;
Node leftNode;
Node rightNode;
}
-------------------------〉〉〉〉〉
package test;
import java.util.Random;
/**
* 二叉搜索树
* @author Administrator
*
*/
public class Tree {
Node root;//根节点
/**
* 查找节点
* @param key 查找的关键字
* @return 关键字所在节点
*/
public Node find(int key){
Node currentNode = root;
while(currentNode.i != key){
if(key > currentNode.i){
currentNode = currentNode.rightNode;
}else{
currentNode = currentNode.leftNode;
}
if(null == currentNode){
return null;
}
}
return currentNode;
}
/**
* 查找最大的节点
* @return 最大的节点
*/
public Node findMax(){
Node currentNode = root;
while(null != currentNode.rightNode){
currentNode = currentNode.rightNode;
}
return currentNode;
}
/**
* 查找最小的节点
* @return 最小的节点
*/
public Node findMin(){
Node currentNode = root;
while(null != currentNode.leftNode){
currentNode = currentNode.leftNode;
}
return currentNode;
}
/**
* 遍历树
* @param node
*/
public void traverse(Node node){
if(null != node){
traverse(node.leftNode);
System.out.println(node.i);
traverse(node.rightNode);
}
}
/**
* 插入节点
* @param node 需要插入的节点
*/
public void insert(Node node){
if(null == root){
root = node;
}else{
Node currentNode = root;
while(true){
if(currentNode.i > node.i){
if(null == currentNode.leftNode){
currentNode.leftNode = node;
return;
}else{
currentNode = currentNode.leftNode;
}
}else{
if(null == currentNode.rightNode){
currentNode.rightNode = node;
return;
}else{
currentNode = currentNode.rightNode;
}
}
}
}
}
/**
* 获得父节点
* @param node 原节点
* @return 原节点的父节点
*/
public Node getParentNode(Node node){
Node parentNode = root;
System.out.println("parentNode:"+parentNode.i);
while(true){
if(parentNode.leftNode.equals(node) || parentNode.rightNode.equals(node)){
return parentNode;
}else if(parentNode.leftNode.i > node.i){
parentNode = parentNode.leftNode;
}else{
parentNode = parentNode.rightNode;
}
}
}
/**
* 获得后继节点
* @param node 原节点
* @return 原节点的后继节点
*/
public Node getSuccessorNode(Node node){
Node SuccessorNode = node.rightNode;
while(SuccessorNode.leftNode != null){
SuccessorNode = SuccessorNode.leftNode;
}
return SuccessorNode;
}
/**
* 删除节点
* @param deleteNode 要删除的节点
*/
public void deleteNode(Node deleteNode){
if(deleteNode.equals(root)){
root = null;
}else{
Node leftNode = deleteNode.leftNode;
Node rightNode = deleteNode.rightNode;
Node parentNode = getParentNode(deleteNode);
if(parentNode.leftNode == deleteNode){
if(null == leftNode && null == rightNode){
parentNode.leftNode = null;
}else if(null != leftNode && null != rightNode){
Node successorNode = getSuccessorNode(deleteNode);
getParentNode(successorNode).leftNode = successorNode.rightNode;
parentNode.leftNode = successorNode;
successorNode.leftNode = leftNode;
successorNode.rightNode = rightNode;
}else{
parentNode.leftNode = null==leftNode?rightNode:leftNode;
}
}else{
if(null == leftNode && null == rightNode){
parentNode.rightNode = null;
}else if(null != leftNode && null != rightNode){
Node successorNode = getSuccessorNode(deleteNode);
getParentNode(successorNode).leftNode = successorNode.rightNode;
parentNode.leftNode = successorNode;
successorNode.leftNode = leftNode;
successorNode.rightNode = rightNode;
}else{
parentNode.rightNode = null==leftNode?rightNode:leftNode;
}
}
}
}
/**
* 按关键字删除节点
* @param key 要删除节点的关键字
*/
public void deleteNode(int key){
deleteNode(find(key));
}
public static void main(String[] args){
Tree tree = new Tree();
Random r = new Random();
for(int i = 0; i < 50; i++){
Node node = new Node();
node.i = r.nextInt(100);
tree.insert(node);
}
tree.traverse(tree.root);
tree.deleteNode(50);
System.out.println("max:"+tree.findMax().i);
tree.traverse(tree.root);
System.out.println("min:"+tree.findMin().i);
}
}
SWT 编 程 总 结
包括常用控件的介绍,布局、事件等等,都是平时用得比较多的
Java
23种设计模式超全详解
Java
23种设计模式超全详解!用生活案例+
代码
示例通俗讲解单例、工厂、观察者等模式原理,附模式选择指南和关系图谱。小白也能秒懂的设计模式实战教程,提升
代码
复用性和扩展性!
C++Test
代码
静态
检查规则制作方法
C++Test
代码
静态
检查规则制作方法 1 前言 在一个团队进行软件开发的过程中,一般都会制定一个大家共同遵守的编码规范,程序员遵循良好的编码规范写程序有很多好处: 1.有助于程序的维护,降低软件生命周期成本,符合项目管理的规律; 2.使团队中相关人员的流动对项目的影响尽可能小,有利于项目的控制与管理 3.提高程序的可读性,有利于相关设计人员交流,
JAVA
字节码增强技术之ASM示例
ASM系列之一:初探ASM 一、什么是ASM ASM是一个
JAVA
字节码分析、创建和修改的开源应用框架。在ASM中提供了诸多的API用于对类的内容进行字节码操作的方法。与传统的BCEL和SERL不同,在ASM中提供了更为优雅和灵活的操作字节码的方式。目前ASM已被广泛的开源应用架构所使用,例如:Spring、Hibernate等。二、ASM能干什么 分析一个类、从字节码角度创建一个类、修
数据结构与算法-线性表(下)链式存储结构(
Java
实例)
线性表是一种数据结构,对数据元素进行逻辑上的顺序排列。线性表链式存储结构是指用链表来存储线性表的数据元素。链表由节点组成,每个节点包含两部分:数据域和指针域。数据域存储节点的数据元素,指针域存储指向下一个节点的指针。链式存储结构相对于顺序存储结构的优点是可以更方便地进行插入和删除操作,通过修改节点的指针即可完成操作,而不需要移动大量数据。但是链式存储结构的缺点是访问节点需要通过指针进行跳转,相对于顺序存储结构,访问速度会慢一些。此外,链式存储结构需要额外的空间存储指针信息,会占用更多的内存空间。
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章