利用队列

按之字形顺序打印二叉树

http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0

/*
思路:利用队列,bfs。将队列中一层元素的孩子都一次性添加到队列中。然后根据标志输出正反序
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        if(pRoot == null)    return new ArrayList<>(0);    //返回空的list
        Queue<TreeNode> queue = new LinkedList<>();
        ArrayList<ArrayList<Integer>> arraylist = new ArrayList<ArrayList<Integer>>();
        queue.add(pRoot);
        boolean flag = false;    //打印标志,false正着添加,true倒着添加
        while(!queue.isEmpty()){
            int size = queue.size();    //表示一层的宽度,这个值到0之后,进入下一层
            //保存一层的结点数组
            ArrayList<Integer> list = new ArrayList<>(size + 1);
            for(; size>0; --size){
                TreeNode node = queue.poll();
                if(node.left != null)    queue.add(node.left);
                if(node.right != null)    queue.add(node.right);
                //判断一下标志,决定正序插入还是反序
                if(!flag){
                    //正序
                    list.add(node.val);
                }else{
                    //反序
                    list.add(0, node.val);    //这个能倒序插入值
                }

            }
            //这一层结束,变换标志,添加进结果集
            if(flag == true){
                flag = false;
            }else{
                flag = true;
            }
            arraylist.add(list);
        }
        return arraylist;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
07-03 16:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务