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;
    }
};
相关推荐
NineData1 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
琢磨先生David9 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
qq_454245039 天前
基于组件与行为的树状节点系统
数据结构·c#
超级大福宝9 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
岛雨QA9 天前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc9 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
wefg19 天前
【算法】单调栈和单调队列
数据结构·算法
岛雨QA9 天前
图「Java数据结构与算法学习笔记12」
数据结构·算法
czxyvX9 天前
020-C++之unordered容器
数据结构·c++
岛雨QA9 天前
多路查找树「Java数据结构与算法学习笔记11」
数据结构·算法