`

java多叉树

    博客分类:
  • java
 
阅读更多
1.建立节点对象
<wiz_code_mirror>
 
 
 
 
 
@Getter
@Setter
@Builder(builderClassName = "NodeBuilder")
@NoArgsConstructor
@AllArgsConstructor
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>
 
 
 
 
 
   @Test
    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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics