102.二叉树的层级遍历


102.二叉树的层级遍历

一、题目

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

二、相关链接

三、解题思路

  • 解法:广度优先搜索
  • 思路
    • 1.先把第一层的结点放到队列queue
    • 2.依次取出并存到结果集result
    • 3.把2中取出结点的左右结点放入队列queue
    • 4.重复123直到queue为空

四、代码

public class BinaryTreeLevelOrderTraversal {
    /**
     * 解法:广度优先搜索
     *
     * @param root
     * @return
     */
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        if (root == null) {
            return result;
        }

        //定义队列,使每次都取同一层的出来(见下面ps1)
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        //每次while遍历时queue都是新的一层
        while (!queue.isEmpty()) {
            //存放全一层的node
            List<Integer> level = new ArrayList<>();
            //需要单独声明,不然queue size会变化
            int size = queue.size();
            //ps1 当前while循环只取当前层数的,然后存下一层的
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                level.add(node.val);
                if (node.left != null) {
                    queue.add(node.left);
                }
                if (node.right != null) {
                    queue.add(node.right);
                }
            }

            result.add(level);
        }

        return result;
    }

    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {}

        TreeNode(int val) { this.val = val; }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }

    /**
     * 例子:
     *  输入:[3,9,20,null,null,15,7]
     *  输出:[
     [3],
     [9,20],
     [15,7]
     ]
     */
    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode(3);
        treeNode.left = new TreeNode(9);
        treeNode.right = new TreeNode(20);
        treeNode.right.left = new TreeNode(15);
        treeNode.right.right = new TreeNode(7);

        System.out.println(new BinaryTreeLevelOrderTraversal().levelOrder(treeNode));

    }
}

五、总结

  • 难度:简单看题解后可完成

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录