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;
    }
};
相关推荐
Awh-2 小时前
数据结构 第六章:哈希存储
数据结构·算法·哈希算法
TAN-90°-3 小时前
Deep Learning for Computer Vision——Recurrent Neural Networks
数据结构·人工智能·rnn·深度学习·神经网络·机器学习·计算机视觉
wabs6663 小时前
关于栈【力扣150.逆波兰表达式求值的思考】
数据结构·c++·算法·leetcode··代码随想录
闻缺陷则喜何志丹4 小时前
【计算几何 第10章】更多几何数据结构:截窗
数据结构·数学·线段树·计算几何·截窗·优先查找树·区间树
啦啦啦啦啦zzzz4 小时前
升序链表的定时器
linux·服务器·网络·数据结构·c++·链表
WBluuue4 小时前
数据结构与算法:带权并查集
数据结构·c++·算法
kkkkkkkkkk_Z12 小时前
学嵌入式和C语言编程数据结构|学习日记Day22:栈,二叉树,哈希存储
c语言·数据结构·学习
码行山野赴时序归途12 小时前
三道经典数组题:从暴力到最优的算法思维
c语言·开发语言·数据结构·算法·leetcode
码行山野赴时序归途17 小时前
算法效率的度量(上):时间复杂度中的对数思维
c语言·数据结构·算法
一木 之林19 小时前
四、STL容器与数据结构
开发语言·数据结构·c++