冲击大厂算法面试=>二叉树专题【二叉树的深度】

在这里插入图片描述

什么是二叉树的深度?

节点的深度:从根节点到当前节点所经历过的节点数量。如图,2 节点的深度为 2。
在这里插入图片描述

高度、深度、层的概念
在这里插入图片描述

二叉树的最大深度

在这里插入图片描述

上代码

class Solution {
    public int maxDepth(TreeNode root) {
        return dfs(root);
    }

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

题解呀

  • 从根节点开始: maxDepth(root) 方法开始计算树的最大深度,实际的计算由 dfs(root) 完成。
  • 递归遍历: dfs 方法递归地遍历整个树:
    • 对每个节点,先计算左子树的深度。
    • 然后计算右子树的深度。
    • 取两个深度的最大值,加 1,表示包括当前节点。
  • 返回最大深度: 递归直到树的所有节点都被访问,最终计算出整棵树的最大深度并返回。
    1
   / \
  2   3
 / \
4   5

一、叶子节点 45 的深度为 1。
二、节点 2 的最大深度是 2(因为 45 都有深度 1,所以 2 的深度是 max(1, 1) + 1)。
三、节点 3 的深度是 1(因为它是叶子节点)。
四、节点 1 的最大深度是 3(因为子树的深度分别为 2(左)和 1(右),所以 1 的深度是 max(2, 1) + 1)。

最终,maxDepth 返回的值是 3,即整个树的最大深度。这个过于简单,就不再赘述了。

请添加图片描述

二叉树的最小深度

在这里插入图片描述

基本定义:叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点。

上代码

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }

        //到达叶子节点返回,如果当前节点 root 是叶子节点(即没有左子树和右子树),则最小深度是 1,因为到达此节点的路径长度为 1
        if(root.left == null && root.right==null){
            return 1;
        }

        int min = Integer.MAX_VALUE;

        //遍历左子树
        if(root.left != null){
            int left = minDepth(root.left);
            min = Math.min(min,left);
        }

         //遍历右子树
        if(root.right != null){
            int right = minDepth(root.right);
            min = Math.min(min,right);
        }

        return min + 1;
    }
}

题解呀

  • 从根节点开始: minDepth(root) 方法启动计算,实际计算由递归调用 minDepth 完成。
  • 递归遍历: 对每个节点:
    • 先计算左子树的最小深度(如果存在)。
    • 再计算右子树的最小深度(如果存在)。
    • 取两个子树深度中的最小值,加 1 以考虑当前节点。
  • 返回结果: 递归直到遍历整个树,最终返回从根节点到最近叶子节点的路径长度,即最小深度。
int min = Integer.MAX_VALUE;
目的: 初始化一个变量 min 用于存储当前节点子树的最小深度。
起初设为 Integer.MAX_VALUE 是为了确保任何实际计算出的深度都比它小。

在这里插入图片描述

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值