leetcode:559. N叉树的最大深度

给定一个 N 叉树,找到其最大深度。

最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

例如,给定一个 3叉树 :
示例

方法一:递归方法

时间复杂度:每个节点遍历一次,所以时间复杂度为O(N),其中N为节点数
空间复杂度:最坏情况下,树完全非平衡
例如每个节点有且仅有一个孩子节点,递归调用则会发生N此(等于树的深度),所以存储调用栈需要O(N)。
但在最好情况下(树完全平衡),树的高度为log(N)。所以此情况的下空间复杂度为O(log(N))

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
    public int maxDepth(Node root) {
        if(root == null) return 0;
        int result = 1;
        for(Node node : root.children){
            result = Math.max(result, maxDepth(node) + 1);
        }
        return result;
    }
}

方法二:迭代

时间复杂度:O(N)
空间复杂度:O(N)

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
    public int maxDepth(Node root) {
        if(root == null) return 0;
        int layer = 0;
        Queue<Node> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            layer++;
            //这里需要先计算队列的大小
            int size = queue.size();
            for(int i = 0; i < size; i++){
                Node node = queue.poll();
                for(Node n : node.children){
                    if(n != null){
                        queue.offer(n);
                    }
                }
            }
        }
        return layer;
    }
}




©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页