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

leetcode111 二叉树的最小深度

相对于 104.二叉树的最大深度 ,本题还也可以使用层序遍历的方式来解决,思路是一样的。

最小深度的定义:从根节点到最近叶子节点的最短路径上的节点数量。

特别注意:

  1. 如果一个子树不存在,就不能用它来计算深度(因为它不是叶子节点路径)

  2. 只有当一个节点没有左右子树时,它才是叶子节点

需要注意的是,只有当左右孩子都为空的时候,才说明遍历的最低点了。如果其中一个孩子为空则不是最低点

迭代法

class Solution {
public:
    int minDepth(TreeNode* root) {
        queue<TreeNode*> q;
        if(root == nullptr) return 0;
        q.push(root);
        int dep = 1;
        while(!q.empty()){
            int size = q.size();
            for(int i = 0; i < size; i++){
                TreeNode* cur = q.front();
                q.pop();
                if(!cur->left  && !cur->right) return dep;
                if(cur->left) q.push(cur->left);
                if(cur->right) q.push(cur->right);
            }
            dep++;
        }
        return dep;
    }
};

DFS前序遍历 + 传递当前深度

class Solution {
private:
    int mindp = INT_MAX;
    void traverse(TreeNode* cur, int level){
        if(cur == nullptr) return;
        if(!cur->left && !cur->right) mindp = min(level, mindp);
        if(cur->left) traverse(cur->left, level+1);
        if(cur->right) traverse(cur->right, level+1);
    }

public:
    int minDepth(TreeNode* root) {
        if (!root) return 0; 
        traverse(root, 1);
        return mindp;
    }
};

 递归解法(DFS)

int minDepth(TreeNode* root) {
    if (!root) return 0;          // 情况1:空节点
    
    if (!root->left)              // 情况2:只有右子树
        return minDepth(root->right) + 1;
    if (!root->right)             // 情况3:只有左子树
        return minDepth(root->left) + 1;
        
    return min(minDepth(root->left), minDepth(root->right)) + 1; // 情况4:左右子树都有
}

相关文章:

  • 解决报错:node:internal/errors:496 ErrorCaptureStackTrace(err);
  • Python中将脚本打包成独立的 ​EXE
  • 生成式人工智能认证的理性思考:人工智能(AI)将深度改造行业?
  • 【网络安全】安全的网络设计
  • 蓝桥云客--团队赛
  • kotlin函数类型
  • Higress项目解析(一):Higress核心组件和原理、Wasm插件实现原理
  • 力扣热题100刷题day61|234.回文链表(两种方法)
  • 用Grok 3分析案例并提供一些助理或助手的整理工作
  • 宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡安装pytorch
  • Talib库安装教程
  • 通过AOP切面,切点,反射填充公共字段
  • 神经网络与深度学习:案例与实践——第三章(3)
  • GRBL运动控制算法(二)圆弧插补
  • Flinksql--订单宽表
  • 【LLM系列】1.大模型简介
  • [实战] linux驱动框架与驱动开发实战
  • 物理数据流图
  • 磁盘分析工具合集:告别C盘焦虑!
  • Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?