java队列解决层序遍历

求二叉树的层序遍历

http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3

在这这里我们使用一个队列来解决,层序遍历和二叉树的广度优先遍历很相似,就是额外增加了一个分组的东西。我这里使用int型变量记录本层节点的数量,用next记录下一层节点的数量。当本层节点弹出的时候,now--,当下一层节点添加到队列时候,next++,如此反复直到队列为空。

    ArrayList<ArrayList<Integer>> levelOrder;
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        levelOrder=new  ArrayList<ArrayList<Integer>>();
        if(root==null)return levelOrder;
        LinkedList<TreeNode>queue=new LinkedList<>();
        int now=1,next=0;
        queue.add(root);
        while(!queue.isEmpty()){
            ArrayList<Integer> list = new ArrayList<>();
            while(now>=1){
                TreeNode node = queue.poll();
                list.add(node.val);
                now--;

                if(node.left!=null){
                    queue.add(node.left);
                    next++;
                }
                if(node.right!=null){
                    queue.add(node.right);
                    next++;
                }
            }
            now=next;
            next=0;
            levelOrder.add(list);
        }
        return levelOrder;
    }
全部评论

相关推荐

粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务