复杂代码的书写--树的层序遍历和前序创建例子
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 树的创建