package com.cs.dataStructure.Tree数操作.java建树;
import java.util.ArrayList;
import java.util.List;
//定义(数据库中)树中的属性
class Tree{
private int ruleId;
private int parentId;
List<Tree> child;
public int getRuleId() {
return ruleId;
}
public void setRuleId(int ruleId) {
this.ruleId = ruleId;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public List<Tree> getChild() {
return child;
}
public void setChild(List<Tree> child) {
this.child = child;
}
}
public class Main {
/** 递归建树
* @param parentTree
* @param listTree
* @return
*/
Tree setTree(Tree parentTree,List<Tree> listTree){ //传入树的根结点 和装有所有树的结点list
for(Tree tree:listTree){
if(parentTree.getRuleId() ==tree.getParentId()){ // 遍历找到母结点的所有子结点并将它们加入到对应的集合中
if(parentTree.getChild()==null){
parentTree.setChild(new ArrayList<Tree>());
}
parentTree.getChild().add(setTree(Tree tree, listTree));
}
}
return parentTree; //递归返回条件 当最后的结点已经没有根结点了,返回最后的结点(它自己也是一个母结点)
}
void setTree(Tree parentTree, List<Tree> listTree){
for(Tree tree : listTree){
if(parentTree.getRuleId() ==tree.getParentId()){ // 遍历找到母结点的所有子结点
parentTree.getChild().add(tree);
setTree(parentTree, listTree); //为空类型的效率更高, 不用返回数据装填
应该
}
Tree TreeforSetTree(List<Tree> listTree){
//建立母结点
Tree tree = new Tree();
for(Tree rootNode:listTree){
//将母结点的根节点加入进tree的list中
if(rootNode.getParentId()==0){ //无论判断成功与否 都会进入下一循环
if(tree.getChild()==null){
List<Tree> childList = new ArrayList<Tree>();
tree.setChild(childList);
}
tree.getChild().add(rootNode);
for(Tree childNode : listTree){
if(childNode.getParentId()==rootNode.getRuleId()){
if(rootNode.getChild()==null){
List<Tree> childNodeList = new ArrayList<Tree>();
rootNode.setChild(childNodeList);
}
rootNode.getChild().add(childNode);
}
}
}
}
return tree;
}
}