剑指offer:按之字形顺序打印二叉树

来源:互联网 发布:拓展人脉的软件 编辑:程序博客网 时间:2024/06/12 19:47

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/*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>> listAll=new ArrayList<ArrayList<Integer>>();        ArrayList<Integer> list;        if(pRoot==null)return listAll;        Queue<TreeNode> queue=new LinkedList<TreeNode>();        queue.offer(pRoot);        int count=0;        while(!queue.isEmpty()){            list=new ArrayList<Integer>();            int size=queue.size();            //按照层数遍历,即一个for循环代表一层            for(int i=0;i<size;i++){                //弹出当前节点值                TreeNode temp=queue.poll();                //count用来区别奇数还是偶数层,然后调换位置                if(count%2==0){                    //偶数层从左往右排                    list.add(temp.val);                }else{                    //奇数层从右往左排                    list.add(0,temp.val);            }            //当前节点的左右子树如果不为空,分别入队列            if(temp.left!=null)                queue.offer(temp.left);            if(temp.right!=null)                queue.offer(temp.right);           }            listAll.add(list);            count++;        }        return listAll;    }}