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

相关推荐

不愿透露姓名的神秘牛友
07-11 11:16
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
Lorn的意义:你这标个前端是想找全栈吗?而且项目确实没什么含金量,技术栈太少了,边沉淀边找吧 现在学院本想就业好一点四年至少得高三模式两年加油吧
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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