package 树;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
//蛇形打印二叉树
public class Printerzigzag {
public static void main(String[] args) {
treeNode root=new treeNode(1);
root.left=new treeNode(2);
root.right=new treeNode(3);
root.left.left=new treeNode(4);
root.left.right=new treeNode(5);
root.right.left=new treeNode(6);
root.right.right=new treeNode(7);
ArrayList<ArrayList<Integer>> arr=print(root);
System.out.println();
for(int i=0;i<arr.size();i++){
for(int j=0;j<arr.get(i).size();j++){
System.out.print(arr.get(i).get(j)+" ");
}
System.out.println();
}
}
public static ArrayList<ArrayList<Integer>> print(treeNode root){
ArrayList<Integer> array=new ArrayList<Integer>();
ArrayList<ArrayList<Integer> > array1=new ArrayList<ArrayList<Integer> >();
if(root==null) return array1;
Deque<treeNode> queue=new LinkedList<treeNode>();
queue.addLast(root);
boolean res=true; //标记判断从哪段进出
treeNode last=root; //当前行最右结点
treeNode nlast=null;//下一行打印结果的最右结点
treeNode p=null;
while(!queue.isEmpty()){
if(res==true){
p=queue.pollFirst(); //出队
array.add(p.val); //加入到数组
if(p.left!=null){
nlast=nlast==null?p.left:nlast;//修改nlast
queue.addLast(p.left);
}
if(p.right!=null){
nlast=nlast==null?p.right:nlast;
queue.addLast(p.right);
}
}else{
p=queue.pollLast();
array.add(p.val);
if(p.right!=null){
nlast=nlast==null?p.right:nlast;
queue.addFirst(p.right);
}
if(p.left!=null){
nlast=nlast==null?p.left:nlast;
queue.addFirst(p.left);
}
}
if(last==p&&!queue.isEmpty()){//换行
res=!res;
last=nlast;
nlast=null;
array1.add(array);
array=new ArrayList<Integer>();
}
}
array1.add(array);//最后一组加入结果数组
return array1;
}
}
蛇形打印二叉树
最新推荐文章于 2021-04-24 14:23:36 发布