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

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务