你说清楚点呀,树型结构优化,
你是指哪方面的,是指数据取树型数据,
还java中的JTree运算?

解决方案 »

  1.   

    就是嘛,说清楚点,我才好回答呀:
    一树形结构表,如下
    当前ID号  父ID号          名称
      ID      ParentID       Name解决方法:
    CREATE FUNCTION fn_GetTree (@Id int)
    RETURNS @retTree TABLE (id Int, name nvarchar(50))
    AS
    BEGIN
    declare @Temp table (Id int,Name nvarchar(50))insert @Temp select id,name from tablename where ParentID=@idwhile exists(select id from tablename where ParentID in (select id from @Temp) and id not  in (select id from @Temp) )  insert @Temp select id,name from tablename where ParentID in (select id from @Temp) and id not  in (select id from @Temp)insert @retTree select * from @Tempreturn
    end
      

  2.   

    package TreeStructure;import java.sql.*;
    import javax.swing.tree.*;
    //import TreeStructure.CnStr;public class Tree {

    public void getTree(Connection cn) {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("ROOT");
    PreparedStatement preStmt;
    ResultSet rs;
    String strSQL = "select * from Tree where PID=0" ;
    int father;
    try {
    preStmt = cn.prepareStatement(strSQL);
    rs = preStmt.executeQuery();
    while (rs.next()){
    father = rs.getInt("ID");
    DefaultMutableTreeNode fatherNode = new DefaultMutableTreeNode(father);
    root.add(fatherNode);
    getChildren(cn,fatherNode,father);
    }
    rs.close();
    preStmt.close();
    }
    catch(Exception e) {
    System.out.println(e);
    }
    }

    public void getChildren(Connection cn,DefaultMutableTreeNode fatherNode,
    int father) {
    PreparedStatement preStmt;
    ResultSet rs;
    String strSQL = "select * from Tree where PID=?" ;
    try {
    preStmt = cn.prepareStatement(strSQL);
    preStmt.setInt(1,father);
    rs = preStmt.executeQuery();
    while (rs.next()){
    father = rs.getInt("ID");
    DefaultMutableTreeNode Node = new DefaultMutableTreeNode(father);
    fatherNode.add(Node);
    getChildren(cn,Node,father);
    }
    rs.close();
    preStmt.close();
    }
    catch(Exception e) {
    System.out.println(e);
    }
    }

    }--------------------Configuration: j2sdk1.4.0_01 <Default>--------------------
    D:\Tree\Tree.java:20: cannot resolve symbol
    symbol  : constructor DefaultMutableTreeNode  (int)
    location: class javax.swing.tree.DefaultMutableTreeNode
    DefaultMutableTreeNode fatherNode = new DefaultMutableTreeNode(father);
                                                                        ^
    D:\Tree\Tree.java:43: cannot resolve symbol
    symbol  : constructor DefaultMutableTreeNode  (int)
    location: class javax.swing.tree.DefaultMutableTreeNode
    DefaultMutableTreeNode Node = new DefaultMutableTreeNode(father);
                                                                  ^
    2 errorsProcess completed.
      

  3.   

    你没有看到我给你的算法吗?
    效果跟你用的循环是一样的,
    你想你在java中的用循环的速度肯定慢,我原来也是这样做的,
    后来就改成我的那个自定义函数,速度快了4倍多。