`
Narnia08
  • 浏览: 11036 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

数据库递归算法jav

阅读更多
表结构

字段1     字段2
1             0
2             1
3             1
4             2
5             2
6             4

//根据父ID查询子ID
public static ArrayList getAllSubCateIdFromPARENTCATEID(String parentid) throws Exception {
DataBase db = null;
db = DataBaseFactory.getDataBase(0);
PreStatement stmt = null;
RecordSet rst = null;

ArrayList list = new ArrayList();

stmt = db.setStatement("SELECT CATE_ID FROM CMS_CATEGORY WHERE CATE_PARENTCATEID = ?");
stmt.setString(1, parentid);

rst = db.executeQuery();

while(rst.next()){
  list.add(rst.getString("CATE_ID"));//将子结点添加模拟树
}
db.close();
return list;

}

//获得当前栏目ID下的所有子栏目
public static StringBuffer getAllSubCateID(String parentid) throws Exception {
  //思路:表(实际树)---模拟树---模拟堆栈---输出队列
  ArrayList list = new ArrayList();//模拟堆栈
  ArrayList list2 = new ArrayList();//模拟树--只记录节点下的子结点(不记录所有树形结构)

  StringBuffer str = new StringBuffer();
  String tempParentId = "";
  tempParentId = parentid;
 
  list.add(parentid);//把第一个结点压入堆栈

  list2 = getAllSubCateIdFromPARENTCATEID(tempParentId);//把第一个结点的子结点加到树上
 
  str.append("'"+tempParentId+"',");//当第一个节点放入
 
  if(list.isEmpty()){//当树 第一个节点没有子节点时,什么都不做
  }else{  
   while (!list.isEmpty()) {//当树 第一个节点有子节点时,开始循环获得子结点
    //System.out.println("++ "+list.size());
    //System.out.println("-- "+list2.size());
    if (list2.isEmpty()) {// 叶子节点
     //System.out.println("叶子节点");
     list.remove(list.size()-1);//删除堆栈顶端节点
    } else {     //非叶子节点
     //System.out.println("非叶子节点");
    
     int step = 0;
    
     while (!list2.isEmpty()) {
      list.add(list2.get(list2.size()-1));// 把 非叶子节点 压入 堆栈
     
      str.append("'"+(String)list2.get(list2.size()-1)+"',");//把当前节点 压入 输出队列
     
      list2.remove(list2.size()-1);//删除 非叶子节点
     
      ++step;
     
     }
     //把下一层的所有子结点压入堆栈
     for(int u=1;u<=step;u++){
      list2.addAll(getAllSubSiteIdFromPARENTCATEID((String)list.get(list.size()-u)));//根据堆栈顶端节点查询子结点放入模拟树中
     }
    }
   
   }
  }
 
  str = new StringBuffer(str.substring(0,str.lastIndexOf(",")));

  return str;
}修改了点错误,这个算法有点慢……听说二叉树排序会快点……有机会再改。
分享到:
评论

相关推荐

    Java扫雷游戏的设计与实现毕业设计论文.rar

    然后设计游戏流程,介绍雷区中的雷怎么安放和产生雷的随机算法;最后介绍游戏中可能会触发的各种时间,比如鼠标点击时间和清理掉没有雷的格子,其中鼠标事件包括点击到或没有点击到雷触发的事件和点击到重新开始以及...

    java源码包---java 源码 大量 实例

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...

    java源码包2

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost...

    java源码包3

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost...

    java源码包4

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...

    JAVA上百实例源码以及开源项目

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...

    JAVA上百实例源码以及开源项目源代码

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...

    Java面试宝典2012版

    8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如...

    Java面试宝典2012新版

    8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:...

Global site tag (gtag.js) - Google Analytics