Leetcode111. 二叉树的最小深度

思路1

四种情况:根节点空、左子树空、右子树空、左右子树非空

复杂度

时间复杂度: O(n)

空间复杂度: O(logn)

核心代码

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int getDepth(TreeNode* root){
        //1.节点为空
        if(root==NULL) return 0;
        int leftDepth=getDepth(root->left);
        int rightDepth=getDepth(root->right);
        //2.左空
        if(root->left==NULL){
            return rightDepth+1;
        }
        //3.右空
        if(root->right==NULL){
            return leftDepth+1;
        }
        //4.左右非空
        return min(rightDepth,leftDepth)+1;
    }
    int minDepth(TreeNode* root) {
        return getDepth(root);
    }
};

//作者:Stephy-CaiXiaocheng
//链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree/solutions/3901850/jian-dan-cu-bao-de-fang-fa-by-epic-gagar-mlue/
//来源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路2

  1. 层序遍历:遇到第一个叶子节点(左空右空),直接返回当前层数=最小深度
  2. 层序遍历用队列,先进先出保证顺序。

复杂度

时间复杂度: O(n)

空间复杂度: O(n)

核心代码

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(!root) return 0;
        queue<TreeNode*> q;
        q.push(root);
        int depth=0;
        while(!q.empty()){
            depth++;//进入新一层,深度+1
            int sz=q.size();
            for(int i=0;i<sz;i++){
                TreeNode* node=q.front();
                q.pop();
                //第一个叶子结点,直接返回当前深度
                if(!node->left&&!node->right){
                    return depth;
                }if(node->left) q.push(node->left);
                if(node->right) q.push(node->right);
            }
        }
        return depth;
    }
};
相关推荐
Livia要学习34 分钟前
Python2和Python3字典底层原理
数据结构
青梅橘子皮1 小时前
STL---map/set... “家族“详解(从使用到底层)(1)
数据结构·算法
灵枢时代6 小时前
小程序在生鲜配送行业,如何设计夜间预约和次日达的订单处理流程?
数据结构·人工智能·小程序
一条大祥脚6 小时前
ABC468 扫描线|贡献法|二阶差分|线段树优化DP
数据结构·算法
mifengxing1 天前
LeetCode 189 轮转数组|3种解法拆解,从暴力到O(1)原地最优解
数据结构·算法·leetcode
MIngYaaa5201 天前
2026暑期牛客多校3 2026-7-24
数据结构·算法·000
2501_937860941 天前
Java 集合底层深度剖析:Map 与 Set、二叉搜索树、哈希表全解
java·数据结构·散列表
Hommy881 天前
【剪映小助手】字符串列表转对象接口(Str List To Obds)
数据结构·list·剪映小助手·视频剪辑自动化·剪映api·开源剪映小助手
noipp1 天前
推荐题目:洛谷 P3726 [AHOI2017/HNOI2017] 抛硬币
c语言·数据结构·c++·算法·编程·洛谷·luogu
wabs6661 天前
关于链表【力扣19.删除链表的倒数第N个节点的思考】
数据结构·leetcode·链表