《java树形递归.docx》由会员分享,可在线阅读,更多相关《java树形递归.docx(6页珍藏版)》请在金锄头文库上搜索。
1、如何来做一棵递归树,这在前面的文章中有提过,但那是引用了myfaces组件的,今天就不用啥组件了,直接输出树的结构形状.数据库表数据一样,但还是在此重复一次。我们的目标是:完成以下形态的树状.-管理-高级管理员-增加-删除-修改-普通管理员-增加一、建表/*-树形菜单 节点编号 节点名称 节点链接址 些节点父节点 是否最底节点 节点排序(一般用在同级节点上) 节点说明 */drop table EPTreeTable create table EPTreeTable( TreeNodeId int identity(1,1) constraint pk_TreeNode primary key
2、, 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 ParentResource
3、Pojo /* * 节点编号 */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.tre
4、eNodeName = treeNodeName;/* * return treeParentNodeId */public int getTreeParentNodeId() return treeParentNodeId;/* * param treeParentNodeId 要设置的 treeParentNodeId */public void setTreeParentNodeId(int treeParentNodeId) this.treeParentNodeId = treeParentNodeId;/* * return treeNodeId */public int getT
5、reeNodeId() 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
6、();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
7、); /分线tempParent = prp.getTreeParentNodeId();String str = ;if(tempParent = 0)resourceList.add(-+prp.getTreeNodeName();elseresourceList.add(prp.getTreeNodeName();/每棵树的节点数目tempTotalChildren = list.size();Iterator iterator = list.iterator(); while(iterator.hasNext()ParentResourcePojo treePojo = (Parent
8、ResourcePojo)iterator.next();if(tempParent != 0)if( tempParent treePojo.getTreeParentNodeId()num -=1;temp = false;else if( tempParent = treePojo.getTreeParentNodeId() )if(tempTotalChildren =0)temp = false;elsetemp = true;for(int i=0;inum;i+)str = str + -;treePojo.setTreeNodeName(CommonUtil.doAddAppe
9、ndString(str,treePojo.getTreeNodeName();str = ;doTurnParentToTree(treePojo); return resourceList;/* * 父级菜单列表 */private List allParentTreeList = null; /* * 做标记用 */private int flag = 0;/* * 获取所有父级菜单列表树 * return */private List getAllParentTreeList()if(allParentTreeList = null)if(flag = 0)flag = 1;allPa
10、rentTreeList = itbs.getRRCResource();return allParentTreeList;return allParentTreeList;return allParentTreeList;/* * 取子树列 * param prp * return */private List getChildrenList(ParentResourcePojo prp)List list = getAllParentTreeList();int listLength = list.size();List newReturnList = new ArrayList();if
11、(listLength = 0)return newReturnList;List leaveList = new ArrayList();for(int i=0;ilistLength;i+)ParentResourcePojo prPojo = (ParentResourcePojo)list.get(i);int treePojoTreeParantNodeId = prPojo.getTreeParentNodeId();int tpTreeNodeId = prp.getTreeNodeId();if(treePojoTreeParantNodeId = tpTreeNodeId)newReturnList.add(prPojo);elseleaveList.add(prPojo);list = leaveList;return newReturnList;到此完成,期间一定要注重同级节点的排序。