java实现树容易吗

liuyyuns 2010-05-05 10:12:01
用java实现树容易吗?树的内容是来源表。有相关的代码吗?我可以参考一下。
...全文
1676 17 打赏 收藏 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
liboofsc 2010-05-06
  • 打赏
  • 举报
回复
B/S中实现数用javascript啊
wunan320 2010-05-06
  • 打赏
  • 举报
回复
关键是要啥树。。。
要是控件可以参考下javax.swing.JTree
数据结构的树种类就多了。按具体的去google应该都找得到
aisen2013 2010-05-06
  • 打赏
  • 举报
回复
基本上和C差不多
liuyyuns 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
有兴趣的话去看一下:

提问的智慧
http://community.csdn.net/IndexPage/SmartQuestion.aspx
[/Quote]
我会好好学习关于怎么更好的提问,怎么更好的把问题说清楚,问题不清楚是我的错误,不好意思!
sunwei0615 2010-05-06
  • 打赏
  • 举报
回复
java实现树很直观。只要知道方法一般实现起来没有难度
psfifa 2010-05-06
  • 打赏
  • 举报
回复
这个能用上
BearKin 2010-05-06
  • 打赏
  • 举报
回复
http://www.open-open.com/ajax/Tree.htm

别人的树。。 你也可以自己种 难度大不大就看你考虑全不全了
liuyyuns 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zfq642773391 的回复:]
树有好多种,你看你想用哪种了
[/Quote]
就是想实现B/S 程序中用于菜单的树,能够弹出一个窗口,显示一棵树就可以了。
zfq642773391 2010-05-06
  • 打赏
  • 举报
回复
树有好多种,你看你想用哪种了
liuyyuns 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
我感觉楼主问的问题都是叫人看不懂的!前面那个日期帖子是这样,这个帖子还是这样!

树,在程序中有很多种概念。

数据结构中的树
桌面程序、C/S 程序中用于菜单的树
B/S 程序中用于菜单的树

简直都不知道在问什么!
[/Quote]
就是想实现B/S 程序中用于菜单的树,能够弹出一个窗口,显示一棵树就可以了。
  • 打赏
  • 举报
回复
同意果子观点。。问题问的有问题。。
andy2u 2010-05-06
  • 打赏
  • 举报
回复
还有SkipList,唉一想到这些就头疼
justlearn 2010-05-05
  • 打赏
  • 举报
回复
普通2叉树还好。AVL和RB的很麻烦,转啊转的
  • 打赏
  • 举报
回复
有兴趣的话去看一下:

提问的智慧
http://community.csdn.net/IndexPage/SmartQuestion.aspx
  • 打赏
  • 举报
回复
我感觉楼主问的问题都是叫人看不懂的!前面那个日期帖子是这样,这个帖子还是这样!

树,在程序中有很多种概念。

数据结构中的树
桌面程序、C/S 程序中用于菜单的树
B/S 程序中用于菜单的树

简直都不知道在问什么!
一头头 2010-05-05
  • 打赏
  • 举报
回复
给你一个代码(二叉搜索树)比较简单可以自己改改
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);
}
}
一头头 2010-05-05
  • 打赏
  • 举报
回复
说难不难 说容易不容易

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧