【文件属性】:
文件名称:无限级树(Java递归)
文件大小:7KB
文件格式:TXT
更新时间:2011-12-03 03:19:51
堆在树
无限级树(Java递归)
2007-02-08 10:26
这几天,用java写了一个无限极的树,递归写的,可能代码不够简洁,性能不够好,不过也算是练习,这几天再不断改进。前面几个小图标的判断,搞死我了。
package com.nickol.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.nickol.utility.DB;
public class category extends HttpServlet {
/**
* The doGet method of the servlet.
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("");
out.println("");
out.println("
Category" +
"" +
"" +
"");
out.println(" ");
out.println(showCategory(0,0,new ArrayList(),"0"));
out.println(" ");
out.println("");
out.flush();
out.close();
}
public String showCategory(int i,int n,ArrayList frontIcon,String countCurrent){
int countChild = 0;
n++;
String webContent = new String();
ArrayList temp = new ArrayList();
try{
Connection conn = DB.GetConn();
PreparedStatement ps = DB.GetPs("select * from category where pid = ?", conn);
ps.setInt(1, i);
ResultSet rs = DB.GetRs(ps);
if(n==1){
if(rs.next()){
webContent += "
";//插入结尾的减号
temp.add(new Integer(0));
}
webContent += "
";//插入站点图标
webContent += rs.getString("cname");
webContent += "
\n";
webContent += showCategory(Integer.parseInt(rs.getString("cid")),n,temp,"0");
}
if(n==2){
webContent += "
\n";
}else{
webContent += "
\n";
}
while(rs.next()){
for(int k=0;k
";//插入空白
}else if(iconStatic == 1){
webContent += "
";//插入竖线
}
}
if(rs.isLast()){
if(checkChild(Integer.parseInt(rs.getString("cid")))){
webContent += "
";//插入结尾的减号
temp = (ArrayList)frontIcon.clone();
temp.add(new Integer(0));
}else{
webContent += "
";//插入结尾的直角
}
}else{
if(checkChild(Integer.parseInt(rs.getString("cid")))){
webContent += "
";//插入未结尾的减号
temp = (ArrayList)frontIcon.clone();
temp.add(new Integer(1));
}else{
webContent += "
";//插入三叉线
}
}
if(checkChild(Integer.parseInt(rs.getString("cid")))){
webContent += "
";//插入文件夹图标
}else{
webContent += "
";//插入文件图标
}
webContent += rs.getString("cname");
webContent += "
\n";
webContent += showCategory(Integer.parseInt(rs.getString("cid")),n,temp,countCurrent+countChild);
countChild++;
}
webContent += "
\n";
DB.CloseRs(rs);
DB.ClosePs(ps);
DB.CloseConn(conn);
}catch(Exception e){
e.printStackTrace();
}
return webContent;
}
public boolean checkChild(int i){
boolean child = false;
try{
Connection conn = DB.GetConn();
PreparedStatement ps = DB.GetPs("select * from category where pid = ?", conn);
ps.setInt(1, i);
ResultSet rs = DB.GetRs(ps);
if(rs.next()){
child = true;
}
DB.CloseRs(rs);
DB.ClosePs(ps);
DB.CloseConn(conn);
}catch(Exception e){
e.printStackTrace();
}
return child;
}
}
---------------------------------------------------------------------
tree.js文件
function changeState(countCurrent,countChild){
var object = document.getElementById("level" + countCurrent + countChild);
if(object.style.display=='none'){
object.style.display='block';
}else{
object.style.display='none';
}
var cursor = document.getElementById("cursor" + countCurrent + countChild);
if(cursor.src.indexOf("images/tree_minus.gif")>=0) {cursor.src="images/tree_plus.gif";}
else if(cursor.src.indexOf("images/tree_minusbottom.gif")>=0) {cursor.src="images/tree_plusbottom.gif";}
else if(cursor.src.indexOf("images/tree_plus.gif")>=0) {cursor.src="images/tree_minus.gif";}
else {cursor.src="images/tree_minusbottom.gif";}
var folder = document.getElementById("folder" + countCurrent + countChild);
if(folder.src.indexOf("images/icon_folder_channel_normal.gif")>=0){
folder.src = "images/icon_folder_channel_open.gif";
}else{
folder.src = "images/icon_folder_channel_normal.gif";
}
网友评论
- 还可以解决了问题
- 多谢共享,不是我想要的,但同样感谢楼主。
- 很好,不错,謝谢楼主分享,數据结构有待加强.
- 谢谢楼主分享,虽然不是我想要的,不过还是谢谢@@@@