欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

复杂代码的书写--树的层序遍历和前序创建例子

程序员文章站 2022-07-10 21:08:25
...

1,先画出思路图,然后一级一级需求实现,缺的后面补,重复的抽象

2,围绕核心操作展开一系列操作的编程方式

3,抽象出类似代码的结构---迭代方法的前后关系

 

 

数的图形,数的存储,迭代的代码,都有前,中,后,层序,在相互转化的时候注意用的顺序要一致

 

一般树的存储用链表,用完就没,顺序的前后反应在代码中是业务方法和自身调用方法的前后

 

 

前序遍历树的创建:nod首先是前序的

 

 

 public Node createNode(LinkList<String> nod,Node root){

 

  

          if(nod==null ||nod.size==0)

 

  return;

              

 

       String data = nod.poll();

 

       if(data!=null)

           root = new Node();//创建没有根之说,需要一个一个创建

                   root.setData(data);

                  createNode(nod,root.lChild);

  createNode(nod,root.rChild);

   else{

    root=null;

 

   }

 

   return root;//由于迭代的特性返回的是最初的根

 

 

}

 

 

 

 

 

 

层序遍历:

 

//前序遍历的输入,每层打印自己的,准备好下层

 

public void cengx(Node node){

 

    if(node==null)

        return ;

 

    system.out.print(node.data+" ");

 List<Node> nodeList = new ArrayList<Node>();

 if(node.lchild!=null){

   nodeList.add(node.lchild);

  

  }

  if(node.rchild!=null){

   nodeList.add(node.rchild);

  }

   cxzy(nodeList);//所有子节点

 

    

 

}

 

 

 

cxzy(List<Node> nodeList){

 

List<Node> newnodeList = new ArrayList<Node>();

 

for(nodeList){

  if(nl.lchild!=null){

   newnodeList.add(nl.lchild);

  

  }

  if(nl.rchild!=null){

   newnodeList.add(nl.rchild);

  }

 system.out.print(nl.data+" ");

}

 

 

 

   if(newnodeList.size!=null)

     cxzy(newnodeList);

 

 

      

      }

 

 

 

 

 

 

 

用对了数据结构或分类恰当,就会有标准的递归,不用一个起头的函数

 

 

 

public void levelOrder() {

    BiTNode<E> node =root;

    LinkedList<BiTNode<E>> list = new LinkedList<>();

    list.add(node);

    while(!list.isEmpty()) {

        node=list.poll();

        System.out.print(node.data);

        if(node.lchild!=null)

            list.offer(node.lchild);

        if(node.rchild!=null)

            list.offer(node.rchild);

    }

}

 

 

 

 

 

参考:

https://blog.csdn.net/jjf09/article/details/70530159    树的创建

 

 

 

相关标签: 数据结构