达人们这个递归算法要怎么实现?(附代码)

pmallen 2008-07-22 09:24:25
我从数据库中读取数据来建立一个目录树,数据库的表名node_tree其中中有node_name,node_id,parentnode_id,node_level,node_order列名,我通过读取子节点的parentnode_id来连接到父节点上,我现面是最笨的实现办法,如果树结点的等级少点还好,如果多了可就吃不消了,这样也不灵活,请问哪位知道怎么用递归实现这个算法? 谢谢 在线等答案

sql = "select * from node_tree where node_level='1'";
Statement sm = cn.createStatement();
ResultSet rs = sm.executeQuery(sql);
while(rs.next())//1级结点
{
String s = rs.getString("node_name");
String rootid = rs.getString("node_id");
DefaultMutableTreeNode root =
new DefaultMutableTreeNode(s);
String childFirst =
"select * from node_tree where node_level='2' "
+"and parentnode_id='" +rootid+
"' order by node_order";
Statement smChild = cn.createStatement();
ResultSet rsfirst = smChild.executeQuery(childFirst);
while(rsfirst.next())//2级结点
{
String child = rsfirst.getString("node_name");
String secondid = rsfirst.getString("node_id");
DefaultMutableTreeNode node =
new DefaultMutableTreeNode(child);
String childSecond = "select * from node_tree where " +
"node_level='3' and parent_id='"
+secondid+"' order by node_order";
Statement smSecond = cn.createStatement();
ResultSet rsSecond = smSecond.executeQuery(childSecond);
while(rsSecond.next())//3级结点
{
String secondName = rsSecond.getString("node_name");
String thirdid= rsSecond.getString("node_id");
DefaultMutableTreeNode nodeSecond =
new DefaultMutableTreeNode(secondName);
String childThird = "select * from node_tree where "+
"node_level='4' and parentnode_id='"
+thirdid+"' order by node_order";
Statement smThird = cn.createStatement();
ResultSet rsThird = smThird.executeQuery(childThird);
while(rsThird.next())
{
String thirdName = rsThird.getString("node_name");
String fourthid = rsThird.getString("node_id");
DefaultMutableTreeNode nodeThird =
new DefaultMutableTreeNode(thirdName);
nodeSecond.add(nodeThird);



...//如果还有结点这样无限期下去可不是办法?
}
node.add(nodeSecond);
}
root.add(node);
rsSecond.close();
}
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小五五 2008-07-23
  • 打赏
  • 举报
回复
http://hi.baidu.com/myj2ee 上头有
小五五 2008-07-23
  • 打赏
  • 举报
回复
可以建一个存储过程,在数据库端用递归。。有现成的代码
HIEUniverse 2008-07-23
  • 打赏
  • 举报
回复
createTree函数最后再加上关闭rs,sm
init函数最后加上关闭cn
HIEUniverse 2008-07-23
  • 打赏
  • 举报
回复
public void init(){
DefaultMutableTreeNode treeroot=new DefaultMutableTreeNode("Tree");
createTree("1",null,treeroot);
}


public void createTree(String nodelevel,String parentnodeid,DefaultMutableTreeNode node){
sql = "select * from node_tree where node_level='"+nodelevel+"'"+"and parentnode_id='"
+parentnodeid+"' order by node_order";
Statement sm = cn.createStatement();
ResultSet rs = sm.executeQuery(sql);
while(rs.next()){
String parentnodename = rs.getString("node_name");
String parentnodeid = rs.getString("node_id");
DefaultMutableTreeNode parentnode= new DefaultMutableTreeNode(parentnodename);
createTree((Integer.parseInt("nodelevel")+1).toString(),parentnodeid,parentnode);
node.add(parentnode);
}
}


没验证,有错误请指出。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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