LeetCode 二叉树的最大深度/N 叉树的最大深度

1,177 阅读3分钟

这是我参与更文挑战的第 22 天,活动详情查看: 更文挑战

二叉树的最大深度(104)

题目描述

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3。

思路分析

寻找二叉树的最大深度,我们可以使用递归的解法,将大问题分解成子问题,也就是说分解成左子树的最大深度和右子树的最大深度,每深入一层,就进行自加 1,然后就层层分解,直到 root == null。

对于该二叉树的最大深度,我们可以使用递归的解法,将大问题分解成子问题,也就是说分解成左子树的最大深度和右子树的最大深度,每深入一层,就进行自加 1,然后就层层分解,直到 root == null。

代码展示

解法一:

public int maxDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
    }

N叉树的最大深度(559)

题目描述

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

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

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

示例 1:

输入:root = [1,null,3,2,4,null,5,6]
输出:3

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5

提示

  • N 叉树的高度小于或等于 1000
  • 节点总数在范围 [0, 10^4]

思路分析

N 叉树的最大深度,解法和二叉树的最大深度很类似,我们把 N 叉树的某个节点的所有自己子节点进行遍历,同理我们可以将一个大问题分解成小问题,也就是说找出根节点的所有子节点中最大深度的那个节点,所有的问题都可以进行分解,直到该节点为空。

代码展示

解法一:

private int deep;
    public int maxDepth(Node root) {
        if(root == null){
            return 0;
        } else if(root.children.isEmpty()){
            return 1;
        } else {
            List<Integer> heights = new LinkedList<>();
            for(Node node: root.children){
                heights.add(maxDepth(node));
            }
            return Collections.max(heights) + 1;
        }
    }

总结

二叉树和N叉树的很多问题都可以使用递归进行解答,至于如何使用递归呢,关键在于如何能将大问题化解成小问题,同时大问题的解法和小问题的解法是一样的,当然递归的终止条件也是很重要的,基于以上的步骤进行分解,我们就能很快求解出类似问题的答案。

由于递归和我们人脑的思路并不是那么的类似,所以在递归问题的求解是一定要理清思路,在宏观上有个整体的把握,从大化小,化繁为简,才能做好相关题目。