题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

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

思路:

  • 常规bfs
  • 层序遍历
  • 使用一个队列维护当前遍历二叉树层的节点集

ps:
主要需要注意空的特殊情况

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    Deque<TreeNode> dq = new LinkedList<>();

    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        //二叉树为空,直接返回
        if(root == null) return res;
        //bfs层次遍历
        dq.add(root);
        while(dq.size() > 0){
            bfs();
        }
        return res;
    }

    public void bfs(){
        //获得当前层中节点个数
        int len = dq.size();
        //if(len <= 0) return;
        ArrayList<Integer> temp = new ArrayList<>();
        //循环添加节点入临时链表
        for(int i = 0; i < len; i++){
            TreeNode cur = dq.pollFirst();
            temp.add(cur.val);
            //左子节点非空,添加入队列
            if(cur.left != null) dq.addLast(cur.left);
            //右子节点非空,添加入队列
            if(cur.right != null) dq.addLast(cur.right);
        }
        //将每层结果加入结果
        res.add(temp);
    }
}
全部评论

相关推荐

牛至超人:哈工大已经很棒了,不需要加括号了,然后咋没有实习经历呢?火速趁寒假整一段实习,导师不让就狠狠肘击
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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