java树形递归
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何来做一棵递归树,这在前面的文章中有提过,但那是引用了myfaces组件的,今天就不用啥组件了,直接输出树的结构形状.
数据库表数据一样,但还是在此重复一次。
我们的目标是:完成以下形态的树状.
--管理
---高级管理员
----增加
----删除
----修改
---普通管理员
----增加
一、建表
/**
--树形菜单
节点编号
节点名称
节点链接址
些节点父节点
是否最底节点
节点排序(一般用在同级节点上)
节点说明
*/
drop table EPTreeTable
create table EPTreeTable
(
TreeNodeId int identity(1,1) constraint pk_TreeNode primary key, TreeNodeName varchar(50) not null,
TreeNodeLink varchar(100) ,
TreeNodeFatherId int default 0, --0 为最高层
TreeNodeIsBottom bit default 1, --1 为底层 0为非底层
TreeNodeCompositor int default 1, -- 默认排在最后面
TreeNodeExplain varchar(200)
)
二、JAVA代码
(1)TO对象
/**
* @author fangbiao
* 用于映射父级菜单TO对象
*/
public class ParentResourcePojo {
/**
* 节点编号
*/
private int treeNodeId;
/**
* 节点名称
*/
private String treeNodeName;
/**
* 父节点
*/
private int treeParentNodeId;
/**
* @return treeNodeName
*/
public String getTreeNodeName() {
return treeNodeName;
}
/**
* @param treeNodeName 要设置的 treeNodeName
*/
public void setTreeNodeName(String treeNodeName) {
this.treeNodeName = treeNodeName;
}
/**
* @return treeParentNodeId
*/
public int getTreeParentNodeId() {
return treeParentNodeId;
}
/**
* @param treeParentNodeId 要设置的 treeParentNodeId
*/
public void setTreeParentNodeId(int treeParentNodeId) {
this.treeParentNodeId = treeParentNodeId;
}
/**
* @return treeNodeId
*/
public int getTreeNodeId() {
return treeNodeId;
}
/**
* @param treeNodeId 要设置的 treeNodeId
*/
public void setTreeNodeId(int treeNodeId) {
this.treeNodeId = treeNodeId;
}
}
(2)树形组合
/**
* 获取节点选择列表信息
* @return
*/
public List getResourceList(){
if(resourceList.size() == 0) {
//获取高级的父节点
resourceList = doTurnParentToTree(itbs.getTopParentResource()); }
return resourceList;
}
private int num =2;
private int tempTotalChildren ;
private boolean temp = false;
private int tempParent; //每次递归节点的父节点
/**
* 对父级列表进行树排
* @param prp
* @return
*/
private synchronized List doTurnParentToTree(ParentResourcePojo prp){ if(prp == null)
return null;
List list = getChildrenList(prp);
//分线
tempParent = prp.getTreeParentNodeId();
String str = "";
if(tempParent == 0){
resourceList.add("-"+prp.getTreeNodeName()));
}else{
resourceList.add(prp.getTreeNodeName()));
//每棵树的节点数目
tempTotalChildren = list.size();
}
Iterator iterator = list.iterator();
while(iterator.hasNext()){
ParentResourcePojo treePojo = (ParentResourcePojo)iterator.next();
if(tempParent != 0){
if( tempParent < treePojo.getTreeParentNodeId()){
if(temp == false)
num += 1;
}else if( tempParent > treePojo.getTreeParentNodeId()){
num -=1;
temp = false;
}else if( tempParent == treePojo.getTreeParentNodeId() ){
if(tempTotalChildren ==0)
temp = false;
else