1.建立节点对象
<wiz_code_mirror>
builderClassName = "NodeBuilder")(
public class Node {
private Node parent;
private String name;
private int rank; //同级排行
private int level;//层级
private List<Node> childrens=new ArrayList<Node>();
}
2.插入对象 先插入3层每层3个子节点
<wiz_code_mirror>
public void addNode(){
Node.NodeBuilder builder = Node.builder();
Node a = builder.level(1).name("a").rank(1).parent(null).childrens(new ArrayList<Node>()).build();
createTree(a);
// queryTree(a);//从上往下一直查找再返回上一层查找
querylevelTree(a);//一层一层查找
return;
}
public void createTree(Node parent){
if(parent.getLevel()>2){//建立3层 父节点层级大于2就退出
return;
}else {
for (int i = 0; i < 3; i++) {
int level = parent.getLevel() + 1;
Node node = createNode(level, "a" + level +parent.getRank() +"-"+i, parent,i);
parent.getChildrens().add(node);
createTree(node);//递归建立子节点
}
}
}
public Node createNode(int level,String name,Node parent,int rank){
Node.NodeBuilder builder = Node.builder();
Node a = builder.level(level).name(name).childrens(new ArrayList<Node>()).parent(parent).rank(rank).build();
return a;
}
3.查找子节点方法一(从顶部往底部查找)
<wiz_code_mirror>
public void queryTree(Node a){
System.out.println(a.getName());
if(a.getChildrens()!=null&&a.getChildrens().size()>0){
List<Node> childrens = a.getChildrens();
for(int i = 0; i< childrens.size();i++){
queryTree(childrens.get(i));
}
}else {//没有子节点退出循环
return;
}
}
输出
a
a21-0
a30-0
a30-1
a30-2
a21-1
a31-0
a31-1
a31-2
a21-2
a32-0
a32-1
a32-2
4.查找子节点方法二(一层一层查找)
<wiz_code_mirror>
public void querylevelTree(Node a){
if(a.getChildrens()!=null&&a.getChildrens().size()>0){
List<Node> childrens = a.getChildrens();
for(int i = 0; i< childrens.size();i++){//先把当前层查找完 再查找下一层
System.out.println(childrens.get(i).getName());
}
for(int i = 0; i< childrens.size();i++){//查找下一层
querylevelTree(a.getChildrens().get(i));
}
}else {//没有子节点退出循环
return;
}
}
输出
a21-0
a21-1
a21-2
a30-0
a30-1
a30-2
a31-0
a31-1
a31-2
a32-0
a32-1
a32-2