题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路:
首先返回二叉树的层次遍历的序列,然后将偶数层的序列顺序改变。
代码(java):
import java.util.ArrayList;
/*
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> > res=new ArrayList<ArrayList<Integer> >();
int level=0;
if(pRoot==null)return res;
else printLevel(res,pRoot,level);
//按照之字型打印
for(int i=0;i<res.size();i++){
if(i%2==1){
for(int j=0;j<res.get(i).size()/2;j++){
int tmp=res.get(i).get(j);
res.get(i).set(j,res.get(i).get(res.get(i).size()-j-1));
res.get(i).set(res.get(i).size()-j-1,tmp);
}
}
}
return res;
}
//层次遍历
void printLevel(ArrayList<ArrayList<Integer> >res,TreeNode pRoot,int level){
if(pRoot==null)return;
if(res.size()<level+1){
ArrayList<Integer> item=new ArrayList<Integer>();
item.add(pRoot.val);
res.add(item);
}
else{
res.get(level).add(pRoot.val);
}
printLevel(res,pRoot.left,level+1);
printLevel(res,pRoot.right,level+1);
}
}