当前位置: 首页 > article >正文

二叉树的最大深度(遍历思想+分解思想)

Problem: 104. 二叉树的最大深度

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

遍历思想(实则二叉树的先序遍历)

1.欲望求出最大的深度,先可以记录一个变量res,同时记录每次当前节点所在的层数depth
2.在递的过程中,每次递一层,也即使当前又往下走了一层,则depth++,当到达叶子节点时,比较并取出max【res, depth】
3.在归的过程中,因为是在往上层归,则depth–;
4.返回最终的res即可

分解思想

1.要求整个树的最大深度则可以分解其为求去当前节点的左右子树的最大深度再加当前节点的高度1

复杂度

二者均为
时间复杂度:

O ( n ) O(n) O(n);其中 n n n为二叉树的节点个数

空间复杂度:

O ( h ) O(h) O(h);最坏空间复杂度

Code

遍历思想

/**
/**
 * Definition for a binary tree node.
 * public 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;
 *     }
 * }
 */
class Solution {
    // recode the maximum depth 
    int res = 0;
    // recode the depth of the traversed node
    int depth = 0;
    public int maxDepth(TreeNode root) {
        traverse(root);
        return res;
    }

    public void traverse(TreeNode root) {
        if (root == null) {
            return;
        }
        depth++;
        if (root.left == null && root.right == null) {
            res = Math.max(res, depth);
        }
        traverse(root.left);
        traverse(root.right);
        depth--;
    }
}

分解思想

 class Solution {
    // Definition: Given the root node, return the maximum depth of the binary tree
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        // calculate the maximum depth of the left and right subtrees
        int leftMax = maxDepth(root.left);
        int rightMax = maxDepth(root.right);
        // The maximum depth of the entire tree is
        // the maximum of the left and right subtree
        // plus one for the root node itself
        int res = Math.max(leftMax, rightMax) + 1;

        return res;
    }
}


http://www.kler.cn/a/523034.html

相关文章:

  • FreeRTOS学习 --- 动态任务创建和删除的详细过程
  • three.js用粒子使用canvas生成的中文字符位图材质
  • Vscode的AI插件 —— Cline
  • 【QT】- QUdpSocket
  • 记忆力训练day07
  • 制造企业的成本核算
  • 算法随笔_28:最大宽度坡_方法2
  • Windows11无法打开Windows安全中心主界面
  • 【llm对话系统】大模型RAG之基本逻辑
  • python实现dbscan
  • 【huawei】云计算的备份和容灾
  • 基于vue和elementui的简易课表
  • skynet 源码阅读 -- 核心概念服务 skynet_context
  • 图像分类(image classification)简介
  • 2001-2021年 全国各地级市宽带接入用户统计数据
  • npm cnpm pnpm npx yarn的区别
  • 《机器学习数学基础》补充资料:第343页结论证明
  • linux常用加固方式
  • 大语言模型LLM在地理信息GIS中应用场景
  • 【Validator】自定义字段、结构体补充及自定义验证,go案例讲解ReportError和errors.As在其中的使用
  • 2. Java-MarkDown文件解析-工具类
  • 20【变量的深度理解】
  • 最大值的期望 与 期望的最大值
  • mysql学习笔记-事务基础知识
  • 渗透测试之WAF规则触发绕过规则之规则库绕过方式
  • Linux进程调度与等待:背后的机制与实现