`
summerkai
  • 浏览: 93390 次
  • 性别: Icon_minigender_2
  • 来自: 农村
社区版块
存档分类
最新评论

递归生成树的方法(子id,父id)【转】

阅读更多
/*
* 创建日期 2005-4-14
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java- 代码样式 - 代码模板
*/
package treeMenu;
import java.util.*;
import java.sql.*;
import dbmanager.DBConnection;
import javax.Servlet.JSP.JspWriter;
/**
* @author 呆猴 lucky
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class Tree {
    private DBConnection conn;
    public ArrayList arrayid;//定义包含所有id的数组
    public ArrayList arrayname;//定义包含所有名称的数组
    public ArrayList arrayparent;//定义包含所有父id的数组
    public ArrayList class1_id;//定义包含所有一级信息id的数组
    public Tree(){
    try{
      conn=new DBConnection();
    }
    catch(Exception e){
      System.out.println("sorry");
    }
    }
    /**
     *
     * 定义读取所有相关记录和一级信息的方法
     */
    public void buidTreeinit() throws SQLException{
    ResultSet rs=conn.runRs("select * from sp_sys_menu_item");
    String aa="";
    String id="";
    String name="";
    String parent_id="";
    int i=0;
    arrayid=new ArrayList();
    arrayname=new ArrayList();
    arrayparent=new ArrayList();
    class1_id=new ArrayList();
    while(rs.next()){
     id=rs.getString("id");
     name=rs.getString("name");
     parent_id=rs.getString("parent_id");
     arrayid.add(id);//把所有id信息赋值到arrayid数组中
     arrayname.add(name);//把所有name信息赋值到arrayname数组中
     arrayparent.add(parent_id);//把所有parent_id信息赋值到arrayparent数组中
     /**
      * 把所有的一级信息赋值到数组class1_id中
      */
     if(parent_id.equals("0"))
      {
      class1_id.add(id);
      }
    }
    conn.free();
    }
    /**
     * 开始定义树型结构的构造
     * @param parentid
     * @throws SQLException
     */
    public void buildTree(JspWriter out,String parentid,int j) throws Exception{
        j++;
   ArrayList tmplist=new ArrayList();//包含所有父id为parent_id的记录的名称数组
   String mmm="    ";
   String nnn="|";
   for(int q=0;q<j;q++){
      nnn=nnn+"--";
      mmm=mmm+"    ";
   }
      String table2="";
      table2=table2+"<tr bgcolor=\"#FFFFFF\">";
      table2=table2+"<td width=\"70%\" height=\"30\">"+mmm+nnn+" <name></td>";
      table2=table2+"<td width=\"30%\" height=\"30\" align=\"center\">";
      table2=table2+"修改  ";
      table2=table2+"注册下级菜单  ";
      table2=table2+"  <del>";
      table2=table2+"</td>";
      table2=table2+"</tr>";
   while(arrayparent.indexOf(parentid)!=-1)
   {
     String tmpname=(String)arrayname.get(arrayparent.indexOf(parentid));//获取所有父id为parent_id的记录的名称
     String tmpid=(String)arrayid.get(arrayparent.indexOf(parentid));//获取该子信息的id,用于赋予下级子信息的父id
     if(has_child(tmpid)){
     out.print(table2.replaceAll("<name>",tmpname).replaceAll("<del>",""));
     }
     else{
     out.print(table2.replaceAll("<name>",tmpname).replaceAll("<del>","删除"));
     }
     int tmp=arrayparent.indexOf(parentid);//获取参数parent_id所在位置
     arrayparent.remove(tmp);//删除参数parent_id所在位置的parent_id
     arrayid.remove(tmp);//删除参数parent_id所在位置的id
     arrayname.remove(tmp);//删除参数parent_id所在位置name
     if(has_child(tmpid))//如果该条信息有相关子信息重新执行buildTree方法
       {
            buildTree(out,tmpid,j);
       }
­
   }
    }
    /**
     * 进行是否有子信息判断
     * @param parentid
     * @return
     */
    public boolean has_child(String parentid)
    {
     boolean bb=false;
­
     if(arrayparent.indexOf(parentid)!=-1)
     {
­
      bb=true;
­
     }
     return bb;
    }
    /**
     * 树型结构显示
     * @param args
     * @throws Exception
     */
    public void showTree(JspWriter out) throws Exception{
     Tree aa=new Tree();
        aa.buidTreeinit();
        String table1="";
        table1=table1+"<tr bgcolor=\"#CCCCCC\">";
        table1=table1+"<td width=\"70%\" height=\"30\">  <name></td>";
      table1=table1+"<td width=\"30%\" height=\"30\" align='center'>";
      table1=table1+"修改  ";
      table1=table1+"注册下级菜单  ";
      table1=table1+"  <del>";
      table1=table1+"</td>";
        table1=table1+"</tr>";
        for(int i=0;i<aa.class1_id.size();i++)
        {
         if(aa.has_child((String)aa.class1_id.get(i))){
         out.print(table1.replaceAll("<name>",(String)aa.arrayname.get(i)).replaceAll("<del>",""));
         }
         else{
         out.print(table1.replaceAll("<name>",(String)aa.arrayname.get(i)).replaceAll("<del>","删除"));
         }
         aa.buildTree(out,(String)aa.class1_id.get(i),0);
        }
    }
}
数据库连接和数据库操作类:
/*
* 创建日期 2005-4-14
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package dbmanager;
import java.sql.*;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class DBConnection {
String user="sa";
String password="sa";
String sDBDriver="com.microsoft.JDBC.sqlserver.SQLServerDriver";
String sConnStr="jdbc:microsoft:sqlserver://172.16.204.10:1433;DatabaseName=HLSP_MIS";
Connection connect=null;
ResultSet rs=null;
Statement stmt = null, stmt1 = null;
public DBConnection(){
  try{
   Class.forName(sDBDriver);
   connect = DriverManager.getConnection(sConnStr,user,password);
   stmt = connect.createStatement();
   stmt1=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
  }
  catch(Exception e){
      System.err.println(e.getMessage());
  }
}
//执行数据库查询
public ResultSet runRs(String sql){
rs=null;
try{
rs=stmt1.executeQuery(sql);
}
catch(SQLException ex){
System.err.println(ex.getMessage());
}
return rs;
}
//执行数据库其他操作
public  boolean  executeSql(String sql)
{
boolean che=false;
try
{
stmt.executeUpdate(sql);
che=true;
}
catch (SQLException ex)
{
System.err.println(ex.getMessage());
che=false;
}
return che;
}
//进行数据库连接释放
public boolean free(){
try {
  connect.close();
  if (stmt!=null){
   stmt.close();
      }
  if(stmt1!=null){
       stmt1.close();
      }
  return true;
  }
  catch (Exception e) {
  return false;
  }
}
}
分享到:
评论

相关推荐

    C# 递归生成树_TreeView

    本示例中的“C# 递归生成树型菜单”着重讲解如何使用递归方法来动态构建一个`TreeView`控件,结合数据库数据,创建可运行的树形菜单。下面我们将详细探讨这个主题。 1. **递归的理解与应用**: 递归是编程中的一个...

    ASP.NET递归生成树导航示例

    在本示例中,我们将探讨如何使用ASP.NET递归生成树导航,这在构建具有层级结构的数据展示,如网站菜单、组织结构或文件系统目录时非常有用。 首先,递归是一种算法设计技术,它通过调用自身来解决问题。在生成树...

    php数组生成树

    接下来,我们将讨论如何实现一个函数,它能接受一个扁平化的数组(所有节点平铺在一起),并根据给定的“父ID”和“ID”键生成树结构。假设我们的数组如下: ```php $flatArray = [ ['id' =&gt; 1, 'parentId' =&gt; 0, ...

    PHP递归生成TREE

    在给定的场景中,`tree.php` 文件很可能是实现递归生成树结构的PHP代码。这个文件可能包含一个函数,该函数接受一个数组(通常是数据库查询结果),然后通过递归地遍历这个数组来构建一个多级的树。每个数组元素代表...

    easyUI递归生成菜单树

    本文将深入探讨如何使用EasyUI递归生成菜单树,并结合前后台代码来实现这一功能。 首先,让我们了解菜单树的基本概念。菜单树是一种以树形结构展示数据的控件,通常用于表示层次关系的数据,如网站导航、文件系统或...

    JavaScript递归算法生成树形菜单

    JavaScript递归算法生成树形菜单是一种常见的编程技巧,主要用于处理具有层级关系的数据,例如网站的导航菜单、组织结构等。在本示例中,我们看到如何利用递归方法将一个对象数组转换为HTML的树形结构,从而在网页上...

    ASP.NET-Treeview-递归生成部门树

    在这个"ASP.NET-Treeview-递归生成部门树"的示例中,我们将探讨如何利用TreeView控件结合递归算法来构建一个表示部门结构的树形视图。 首先,我们要理解TreeView的基本概念。TreeView控件是一个可视化组件,它能够...

    js生成树代码,并且是动态生成的

    根据提供的文件信息,我们可以深入分析并提取出与“使用JavaScript生成树形结构代码,并实现动态生成”的相关知识点。下面将详细介绍这些知识点。 ### 一、理解树形结构 #### 1.1 定义 在计算机科学中,树是一种非...

    SpringBoot + MyBatis Plus 递归获取树形菜单信息列表(附源码)

    在这个例子中,`buildTree`方法接收一个菜单列表和根菜单ID,找到所有父ID等于根ID的菜单,并为它们生成子菜单。这个过程会一直进行,直到所有菜单项都被处理。 在SpringBoot应用中,我们可以创建一个服务类,将...

    asp.net用递归写的树

    在ASP.NET中实现递归生成树,通常涉及到以下关键概念和技术: 1. 数据模型:首先,你需要一个数据模型来存储层级数据。这个模型通常包含一个ID字段(标识当前节点)、一个父ID字段(指向父节点)以及其他相关信息。...

    两种JS生成树方式的源码

    在JavaScript(JS)中生成树形结构,通常用于创建如导航菜单、文件系统视图或者组织数据。在给定的标题和描述中提到了两种方法:一是使用现成的插件,二是采用自定义的JS代码。这两种方法各有优缺点,下面我们将详细...

    C# 递归建树 CreateTree 实例

    最后,我们对每个子节点调用`CreateTree`方法,传递子节点的ID作为新的父ID,以便递归地处理其子节点。 为了使用这个方法,我们需要从数据库中查询所有的`Nodes`,并调用`CreateTree`方法,传入根节点的ID(通常是...

    递归方式实现树形菜单

    递归是一种解决问题的方法,通过将问题分解为更小的相同子问题来解决。以下是对递归实现树形菜单的详细解释: 1. **树形结构理解**:树形结构是数据结构的一种,由节点(或称为顶点)和边组成。每个节点可以有零个...

    .net ,递归写自定义树

    总结来说,构建.NET递归树的关键在于理解递归的概念,以及如何在后台生成树形数据结构,并将其转换为前端可以处理的格式。同时,前端使用合适的jQuery控件,如`jstree`,将数据转化为用户友好的可视化界面。通过这种...

    在JSP中使用递归算法生成目录树

    本文将介绍一种使用递归算法在JSP中生成目录树的方法,结合数据库技术,使得动态生成目录树变得可行。 1. 基本思路: 生成目录树的关键在于理解目录结构的层次关系,这通常可以通过递归算法来实现。递归是一种解决...

    递归构建一整棵树

    递归构建树形结构数据是指使用递归方法生成树状的数据结构,常见于实现具有层级关系的菜单系统,例如无限层级菜单。递归方法通过函数自己调用自己的方式简化问题,使其在面对复杂层级结构时,能够逐层创建和构建出...

    TreeView用递归实现无限级树.rar

    例如,可以创建一个数据模型,该模型包含一个递归方法来生成树的节点,然后将这些节点添加到TreeView控件中。 在实际应用中,为了优化性能,通常会使用分页或懒加载技术,避免一次性加载大量数据。当用户展开树的一...

    C#_TreeView菜单,MenuStrip菜单递归动态生成例子.docx

    TreeView 控件可以用来显示树形结构的数据,它可以根据需要动态生成树形结构的节点。为了实现这个功能,我们可以使用递归函数来加载树形结构的节点。在上面的代码中,我们可以看到使用了 LoadNode 函数来加载树形...

    树形下拉列表 递归实现

    最终,我们从这个递归生成的树中选择所有的记录。 在获取了数据库中的层级数据后,我们需要在前端进行处理,构建树形下拉列表。这通常涉及到JavaScript或其库,如jQuery、React、Vue等。以下是一个基本的JavaScript...

    php递归获取子级,父级,无限极分类,带demo,效率超高

    一种常见的方式是使用“自引用”字段,即一个分类可以有多个子分类,这些子分类的ID作为父分类的外键。这样,每个分类都可以有任意数量的子分类,形成无限级深度。 3. **父级与子级**: 在无限级分类中,每个节点...

Global site tag (gtag.js) - Google Analytics