N叉树的最大深度

72 阅读1分钟

题目

BFS

    public int maxDepth(Node root) {
        if (root == null) {
            return 0;
        }
        // BFS遍历
        Queue<Node> queue = new LinkedList();
        queue.offer(root);

        int step = 0;
        // 扩散节点
        while (!queue.isEmpty()) {
            // 每次扩散将队列中的所有元素全部弹出
            int sz = queue.size();
            for(int i = 0; i < sz; i ++) {
                // 弹出元素
                Node temp = queue.poll();
                // 将扩散进来的元素添加到队列
                if (temp.children != null) {
                    for (Node childNode : temp.children) {
                        queue.offer(childNode);
                    }
                }
            }

            // 步数增加 此时虽然队列中还有元素, 但是前一步的所有元素已经通过sz全部poll出去了
            step ++;
        }
        return step;
    }

基本思路

  1. 注意BFS代码的写, 每次扩散如何消耗完上一轮的所有元素

  2. 如何记录扩散的步数