题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
剑指思路1:栈的思想
若当前打印奇数层,从右到左打印下一个,则从左到右入栈
若当前打印偶数层,从左到右打印下一个,则从右到左入栈
思路2:队列+反转
将每层的数据存进**队列**queue中,偶数层时进行reverse操作
package jianzhi;
import java.util.*;
/*
* 思路2
* */
public class PrintTree {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot)
{
ArrayList<ArrayList<Integer>>res=new ArrayList<>();
if(pRoot==null)
return res;
Queue<TreeNode> queue=new LinkedList<>();//队列
queue.add(pRoot);
boolean reverse=false;
while(!queue.isEmpty())
{
ArrayList<Integer>al=new ArrayList<>();
int len=queue.size();//每层加入到队列中的节点数目
while(len-->0)//当前打印层的子节点有几个就循环多少次
{
TreeNode node=queue.poll();
al.add(node.val);
if(node.left!=null)
queue.add(node.left);
if(node.right!=null)
queue.add(node.right);
}
if(reverse)//偶数层才是reverse=true,才进行反转
Collections.reverse(al);
reverse=!reverse;
res.add(al);
}
return res;
}
}