请问如何建立一个树形的数据结构??(急)在线等

whycloud 2004-08-19 03:37:10
我在做设计的时候需要用的树的数据结构。请问要如何实现?由于数据太多,绝对不可以用2维数组实现
...全文
471 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiyonggang 2004-08-20
  • 打赏
  • 举报
回复
用树标签吧,挺方便的
lakesea 2004-08-20
  • 打赏
  • 举报
回复
取得superID的子节点的方法
public static GE_MAINDOC_M[] findBySuperID(String superID) {
GE_MAINDOC_M[] array = new GE_MAINDOC_M[0];
DataStore data = new DataStore();
try{
data.setCommand("SELECT COUNT(GE_GID) FROM GE_MAINDOC_M WHERE GE_SUPERID = ?");
data.setString(1,superID);
data.execute();
data.next();
int rowCount = data.getInt(1);
if(rowCount>0) {
GE_MAINDOC_M gE_MAINDOC_M = null;
data.close();
data.setCommand("SELECT GE_GID,GE_MNAME,ISDOC FROM GE_MAINDOC_M WHERE GE_SUPERID = ? ORDER BY GE_GID");
data.setString(1,superID);
data.execute();
array = new GE_MAINDOC_M[rowCount];
for(int i=0;i<rowCount;i++) {
data.next();
gE_MAINDOC_M = new GE_MAINDOC_M();
gE_MAINDOC_M.ge_gid = data.getInt(1);
gE_MAINDOC_M.ge_mname = data.getString(2);
gE_MAINDOC_M.isdoc = data.getInt(3);
array[i] = gE_MAINDOC_M;
}
}
}
catch(Exception e) {
e.printStackTrace();
}
finally{
data.close();
}

return array;
}

//生成树的方法
private JTree createTree(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("图形资源");
DefaultTreeModel treeModel = new DefaultTreeModel(root);
JTree tree = new JTree(treeModel);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
addTreeNode(root,"0");
tree.expandRow(0);
tree.setSelectionRow(0);
tree.addTreeSelectionListener(new TreeSelectionListener(){
public void valueChanged(TreeSelectionEvent e){
retrieveSymbol();
}
});
return tree;
}
//生成节点的递归调用
private void addTreeNode(DefaultMutableTreeNode treeNode,String superID) {
GE_MAINDOC_M[] array = GE_MAINDOC_M.findBySuperID(superID);
DefaultMutableTreeNode node = null;
for (int i = 0 ; i < array.length; i++){
node = new DefaultMutableTreeNode(array[i]);
addTreeNode(node,array[i].ge_gid+"");
treeNode.add(node);
}
}


数据结构:ID, NAME ,SUPERID
很简单啊!
holy_phoenix 2004-08-20
  • 打赏
  • 举报
回复
javax.swing.tree is a control that displays a set of hierarchical data as an outline.

你要找的是java.util.List/java.util.ListIterator,定义好树的规则,很容易实现,因为所有添加节点、删除节点的基本工作已经本完成了。
whycloud 2004-08-20
  • 打赏
  • 举报
回复
TO沙虫:能不能说具体一些


TO不要抬杠:tree类是在javax.swing.tree中,用不好吧,而且我的数据是从数据库中读出来的,也要判断节点的连接呀
Lulq21cn 2004-08-20
  • 打赏
  • 举报
回复
楼主想实现如下结构:
是这个样子的,我在数据库中建立了两个字段,一个是这个节点的ID,令一个是下一个节点的ID,我希望在屏幕上输出这样一个结果

1
2
3
4
5
6
7

其中2347是1的子节点,56是4的子节点
----------------------
数据结构:ID, NAME ,SUPERID
1) 如果是Sql Server,可参考sql Server联机丛书的 Transact-SQL 窍门->展开层次结构
一节有详细描述;
2) 如果使用Oracle数据库,操作上述数据结构更为简单(网上有太多实例),通过一条简单的Pl Sql就可以实现上述结果,你要做的是只需在客户端将它取出显示出来就行了。
holy_phoenix 2004-08-19
  • 打赏
  • 举报
回复
J2SE里面有现成的tree的源代码。
Lulq21cn 2004-08-19
  • 打赏
  • 举报
回复
原来是关于数据库的,
A)数据库是Sql Server,在帮助里有关于树状浏览的详细实例,在后台通过存储过程实现;
B)数据库是Oracle,那更简单的,通过自带的Pl sql就可以实现。

对于后台可以实现的数据,不一定一定就必须在前台实现,效率也不见得高。
whycloud 2004-08-19
  • 打赏
  • 举报
回复
UP
whycloud 2004-08-19
  • 打赏
  • 举报
回复
由于数据量太大了,有可能会达到2000+,所以不可能用循环读
gallenvaw 2004-08-19
  • 打赏
  • 举报
回复
我认为应该建立至少三个字段
parentId youselfId childrenId
然后如果是楼主的结构的话,可以建立三个table(1)(2,3,4,7)(5,6)
根据jdbc 循环嵌套从数据库读出不就可以了么?
lakesea 2004-08-19
  • 打赏
  • 举报
回复
是这个样子的,我在数据库中建立了两个字段,一个是这个节点的ID,令一个是下一个节点的ID

为什么另一个不是父亲节点的ID啊??让人费解!!!
gallenvaw 2004-08-19
  • 打赏
  • 举报
回复
应该还有一个父节点的id呀!
whycloud 2004-08-19
  • 打赏
  • 举报
回复
是这个样子的,我在数据库中建立了两个字段,一个是这个节点的ID,令一个是下一个节点的ID,我希望在屏幕上输出这样一个结果

1
2
3
4
5
6
7

其中2347是1的子节点,56是4的子节点
射天狼 2004-08-19
  • 打赏
  • 举报
回复
那就定义一棵树呗,数据结构里不是有这样的算法吗~~~~
gallenvaw 2004-08-19
  • 打赏
  • 举报
回复
你是说节点太多么??可以用数据库来建数呀!
AllError 2004-08-19
  • 打赏
  • 举报
回复
大虾,不懂你的意思耶
whycloud 2004-08-19
  • 打赏
  • 举报
回复
自己UP一下

62,614

社区成员

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

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