帮个忙:不难;将以下的表用递归的形式写成下列的表示(200分,关键我对递归不甚了解)
表结构tree表
0 系统目录
001 生产部门 1
001001 生产一部
001002 生产二部
002 业务部门 1
002001 业务部门1
002002 业务部门2
002003 业务部门3
003 市场部门 1
003001 市场部门1
003002 市场部门2
004 开发部门 1
004001 开发部门 1
005 策划部门 1
005001 策划部门 1
005002 策划部门 2
006 企业规划部 1
006001 企业规划部 1
006002 企业规划部 2
006003 企业规划部 3
006004 企业规划部 4
生成后的HTML语言(类似,因为我增加一些子目录而已)
可以将以下的语句拷贝看看运行后的结果
<div>
<span><input type=checkbox value="0" name="Book" checked> 系统目录</span>
<UL id=root>
<LI><span><input type=checkbox name="Book" value=001 checked> 生产部门 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=001001 checked> 生产一部 </span>
<LI><span><input type=checkbox name="Book" value=001002 checked> 生产二部 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=001002001> ssssssssssssssss </span>
</UL>
</UL>
<LI><span><input type=checkbox name="Book" value=002> 业务部门 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=002001> 业务部门1 </span>
<LI><span><input type=checkbox name="Book" value=002002> 业务部门2 </span>
<LI><span><input type=checkbox name="Book" value=002003> 业务部门3 </span>
</UL>
<LI><span><input type=checkbox name="Book" value=003 checked> 市场部门 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=003001> 市场部门1 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=003001001> shdhdfsg </span>
</UL>
<LI><span><input type=checkbox name="Book" value=003002 checked> 市场部门2 </span>
</UL>
<LI><span><input type=checkbox name="Book" value=005 checked> 策划部门 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=005001 checked> 策划部门 1 </span>
<LI><span><input type=checkbox name="Book" value=005002 checked> 策划部门 2 </span>
</UL>
<LI><span><input type=checkbox name="Book" value=006> 企业规划部 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=006001> 企业规划部 1 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=006001001> 645334534 </span>
</UL>
<LI><span><input type=checkbox name="Book" value=006002> 企业规划部 2 </span>
<UL>
<LI><span><input type=checkbox name="Book" value=006002001> dfgdfgdfgdfg </span>
</UL>
<LI><span><input type=checkbox name="Book" value=006003> 企业规划部 3 </span>
<LI><span><input type=checkbox name="Book" value=006004> 企业规划部 4 </span>
</UL>
</div>
//*******************************************************************
各位,拜托了。和以下的帖子
http://community.csdn.net/Expert/topic/3157/3157582.xml?temp=.4958002
http://community.csdn.net/Expert/topic/3154/3154002.xml?temp=.7400629
http://community.csdn.net/Expert/topic/3211/3211601.xml?temp=.9721186
http://community.csdn.net/Expert/topic/3202/3202315.xml?temp=9.105861E-03
http://community.csdn.net/Expert/topic/3149/3149312.xml?temp=.8500025
解决此问题者,独得200分,对于递归熟练的人,是很简单的!只需要你的举手之劳!
问题点数:20、回复次数:11Top
1 楼taoyi(无邪)回复于 2004-08-03 08:46:34 得分 0
如果仅像上面那样,嵌套循环就可以解决的Top
2 楼kw123(阿柯)回复于 2004-08-03 09:32:48 得分 0
给些意见啊!200分。没有人要?Top
3 楼kw123(阿柯)回复于 2004-08-03 10:12:01 得分 0
没有人会吗?Top
4 楼kw123(阿柯)回复于 2004-08-03 12:22:00 得分 0
看来又成了浪费的问题!
没有高手!遗憾!!!!!!!!!!!!!!
自己忙吧
唉!
人气真差Top
5 楼flyxxxxx()回复于 2004-08-03 12:35:53 得分 20
看看这里,http://community.csdn.net/Expert/TopicView.asp?id=3190905Top
6 楼TinyJimmy(Jimmy)回复于 2004-08-03 12:39:20 得分 0
你这种语气说话, 谁愿意理你.Top
7 楼kw123(阿柯)回复于 2004-08-03 12:53:46 得分 0
对于自己说说的,只是一时的气话!
可以看出,问了很久,人也很疲惫,但是时间紧迫
出现言语不当希望各位大侠谅解Top
8 楼kw123(阿柯)回复于 2004-08-03 14:24:35 得分 0
................Top
9 楼kw123(阿柯)回复于 2004-08-04 09:06:44 得分 0
这样吧,可否不使用递归也可以实现以上目录树的结构!!!
我的代码是
<%!
String sId;
String sName;
String sTemp;
ResultSet rset=null;
int iCount=0;
int iLen = 0;
int iLength = 3;
int iLens=3;
%>
<div>
<span><input type=checkbox>企业</span>
<UL id=root>
<%
rset=conn.executequery("select * from tree order by id");
//主目录信息
while (rset.next())
{
sId = rset.getString("id");
iLen = sId.length();
sName=rset.getString("name");
ResultSet rs = conn.executequery("select count(*) as icount from tree where id like: '"+sId+"%'");
if(rs.next()) iCount = rs.getInt("icount");//得到是否有下级目录
if(iCount==1)
{
%>
<LI><span><input type=checkbox value=<%=sId%>> <%=sName%></span>
<%
}
if((iCount>1)&&((iLength-iLen==0)||(iLen % iLength==0)))
{
%>
<LI><span><input type=checkbox value=<%=sId%>> <%=sName%></span>
<UL>
<%
}
if(iLen-iLens<0)
{
%>
</UL>
<%
}
iLens = iLen;
}
%>
</UL>
</div>
但是在没有子目录情况下就会出错!!
如何更改?
或者有更好的解决办法Top
10 楼awaysrain(绝对零度)(既然选择了远方就要日夜前行)回复于 2004-08-04 14:04:22 得分 0
我没有连接数据库,把数据全放到了ArrayList里了,已经调试通过,你看看吧
嫌效率不高的话自己优化吧
TreeTest.java
===================================================================
package treetest;
import java.sql.*;
import java.util.*;
public class TreeTest {
StringBuffer buffer = new StringBuffer();
String result;
ArrayList codeList = new ArrayList();
ArrayList nameList = new ArrayList();
public String getResult() {
return buffer.toString();
}
public TreeTest() {
codeList.add("001");
nameList.add("生产部门");
codeList.add("001001");
nameList.add("生产一部");
codeList.add("001002");
nameList.add("生产二部");
codeList.add("002");
nameList.add("业务部门");
codeList.add("002001");
nameList.add("业务部门1");
codeList.add("002002");
nameList.add("业务部门2");
codeList.add("002003");
nameList.add("业务部门3");
codeList.add("003");
nameList.add("市场部门");
codeList.add("003001");
nameList.add("市场部门1");
codeList.add("003002");
nameList.add("市场部门2");
codeList.add("004");
nameList.add("开发部门");
codeList.add("004001");
nameList.add("开发部门1");
codeList.add("005");
nameList.add("策划部门");
codeList.add("005001");
nameList.add("策划部门 1");
codeList.add("005002");
nameList.add("策划部门 2");
codeList.add("006");
nameList.add("企业规划部");
codeList.add("006001");
nameList.add("企业规划部 1");
codeList.add("006002");
nameList.add("企业规划部 2");
codeList.add("006003");
nameList.add("企业规划部 3");
codeList.add("006003001");
nameList.add("企业规划部 3001");
codeList.add("006003001001");
nameList.add("企业规划部 3001001");
codeList.add("006003001001001");
nameList.add("企业规划部 3001001001");
codeList.add("006003002");
nameList.add("企业规划部 3002");
codeList.add("006004");
nameList.add("企业规划部 4");
buffer.append("<div>\n");
buffer.append("<span><input type=checkbox>系统目录</span>\n");
buffer.append("<UL id=root>");
makeTree(codeList,nameList,1,null);
buffer.append("</UL>");
buffer.append("</div>\n");
}
public void makeTree(ArrayList cList,ArrayList nList,int level,String parentCode){
int len = level*3;
String space = "";
for(int n = 1; n < level;n++){
space += " ";
}
for(int i = 0;i < cList.size();i++)
{
String code = (String)cList.get(i);
String name = (String)nList.get(i);
if(code.length() != len)
continue;
if(level == 1){
buffer.append(space + "<LI><span><input type=checkbox>" + name + "</span>\n");
if(hasChild(code,cList)){
buffer.append(space + "<UL>\n");
makeTree(cList, nList, level + 1, code);
buffer.append(space + "</UL>\n");
}
}else if(code.startsWith(parentCode)){
buffer.append(space + "<LI><span><input type=checkbox>" + name + "</span>\n");
if(hasChild(code,cList)){
buffer.append(space + "<UL>\n");
makeTree(cList, nList, level + 1, code);
buffer.append(space + "</UL>\n");
}
}
}
}
public boolean hasChild(String c,ArrayList cList){
boolean hasChild = false;
Iterator iter = cList.iterator();
while(iter.hasNext()){
String tmpCode = (String) iter.next();
if((tmpCode.length() == c.length() + 3 )&&tmpCode.startsWith(c)){
return true;
}
}
return hasChild;
}
}
test.jsp
------------------------------------------------------------------
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
jsp1
</title>
<SCRIPT LANGUAGE="JavaScript">
<!--
function checkSelect(){
var elm = event.srcElement.parentNode;
checkChildrenRecurve(elm);
checkRootRecurve(document.getElementById("root"));
}
function checkChildrenRecurve(elm){
var li = elm.parentNode;
var ul = li.lastChild;
if (ul.tagName != "UL") return;
var lis = ul.children;
for (var i=0;i<lis.length;i++){
lis[i].firstChild.firstChild.checked=elm.firstChild.checked;
checkChildrenRecurve(lis[i].firstChild)
}
}
function checkRootRecurve(ul){
if (ul.tagName != "UL") {
ul.parentNode.firstChild.firstChild.allChecked = ul.parentNode.firstChild.firstChild.checked;
ul.parentNode.firstChild.firstChild.allUnChecked = !ul.parentNode.firstChild.firstChild.checked;
return;
}
var lis = ul.children;
var allChecked = true;
var allUnChecked = true;
for (var i=0;i<lis.length;i++){
checkRootRecurve(lis[i].lastChild);
allChecked = allChecked && lis[i].firstChild.firstChild.checked && lis[i].firstChild.firstChild.allChecked;
allUnChecked = allUnChecked && !lis[i].firstChild.firstChild.checked && lis[i].firstChild.firstChild.allUnChecked;
}
ul.parentNode.firstChild.firstChild.allChecked=allChecked;
ul.parentNode.firstChild.firstChild.allUnChecked=allUnChecked;
if (allChecked || allUnChecked){
ul.parentNode.firstChild.firstChild.checked=allChecked;
ul.parentNode.firstChild.firstChild.disabled=false;
ul.parentNode.firstChild.childStatus=false;
}else{
ul.parentNode.firstChild.firstChild.disabled=true;
ul.parentNode.firstChild.childStatus=true;
ul.parentNode.firstChild.firstChild.checked=true;
}
}
function enableFirstChild(){
this.childStatus = this.firstChild.disabled;
this.firstChild.disabled=false;
}
function recoverFirstChild(){
this.firstChild.disabled = this.childStatus;
}
function init(){
var elms = document.getElementsByTagName("INPUT");
for (var i=0;i<elms.length;i++)
elms[i].onclick=checkSelect;
var elms = document.getElementsByTagName("SPAN");
for (var i=0;i<elms.length;i++){
elms[i].onmouseover=enableFirstChild;
elms[i].onmouseout=recoverFirstChild;
}
}
//-->
</SCRIPT>
</head>
<jsp:useBean id="treeBean" scope="request" class="treetest.TreeTest" />
<body onload="init()">
<%
out.println(treeBean.getResult());
%>
</body>
</html>
Top
11 楼awaysrain(绝对零度)(既然选择了远方就要日夜前行)回复于 2004-08-04 14:08:57 得分 0
抱歉,我没有仔细看数据库的结构,自己写了个函数遍历判断有没有下级,你修改一下吧用数据库中的字段吧Top




