算法学习#29 二叉树的层序遍历

题目详情

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

       3
     /   \
    9     20
          / \
         15  7


Java代码(BFS)

public List> levelOrder(TreeNode root) {
    //边界条件判断
    if (root == null)
        return new ArrayList<>();
    //队列
    Queue queue = new LinkedList<>();
    List> res = new ArrayList<>();
    //根节点入队
    queue.add(root);
    //如果队列不为空就继续循环
    while (!queue.isEmpty()) {
        //BFS打印,levelNum表示的是每层的结点数
        int levelNum = queue.size();
        //subList存储的是每层的结点值
        List subList = new ArrayList<>();
        for (int i = 0; i < levelNum; i++) {
            //出队
            TreeNode node = queue.poll();
            subList.add(node.val);
            //左右子节点如果不为空就加入到队列中
            if (node.left != null)
                queue.add(node.left);
            if (node.right != null)
                queue.add(node.right);
        }
        //把每层的结点值存储在res中,
        res.add(subList);
    }
    return res;
}

总结

层序遍历需要使用到队列,因为返回对象是一个包含列表的列表,所以,新建一个包含列表的列表。先将根节点入队,然后开始遍历树,先得到队列的大小,然后先建一个列表,将队列中所有元素加入到新建的列表,然后再将左右节点加入队列,在for循环后将新建的sublist加入列表

你可能感兴趣的:(算法学习#29 二叉树的层序遍历)