题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解析:和之前的层次遍历二叉树一样的思想,只不过本题需要按照之字行遍历。只需要用一个index标识下就好了。index为奇数,就正序添加,否则,把该list翻转,然后添加进去。详情见代码
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
if(pRoot==null){
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
int current=1;
int next=0;
int index=0;//标识奇数顺序
while (!queue.isEmpty()){
TreeNode node=queue.poll();
current--;
temp.add(node.val);
if(node.left!=null){
queue.add(node.left);
next++;
}
if(node.right!=null){
queue.add(node.right);
next++;
}
if(current==0){
current=next;
next=0;
index++;
if(index%2!=0){//奇数行就是正序
result.add(temp);
}else {//偶数行则是逆序输出
Collections.reverse(temp);
result.add(temp);
}
temp = new ArrayList<>();
}
}
return result;
}
}