利用队列

按之字形顺序打印二叉树

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;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务