列表

详情


NC234. 二叉树的最小深度

描述

给定一颗节点数为N的叉树,求其最小深度。最小深度是指树的根节点到最近叶子节点的最短路径上节点的数量。
(注:叶子点是指没有子点的节点。)

数据范围:
0<=N<=6000
0<=val<=100

你能使用时间复杂度为O(N),空间复杂度为O(logN)的解法通过本题吗?

例如当输入{1,2,3,4,5}时,对应的二叉树如下图所示:
可以看出离根节点最近的叶子节点是节点值为3的节点,所以对应的输出为2。

示例1

输入:

{1,2,3,4,5}

输出:

2

示例2

输入:

{1,#,2,#,3}

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 3ms, 内存消耗: 768KB, 提交时间: 2021-11-26

int my_min(int lhs, int rhs)
{
    return lhs<rhs ? lhs : rhs;
}
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型
 */
int run(struct TreeNode* root ) {
    // write code here
    if( !root ) return 0;
    
    return (root->left ? (root->right ? my_min(run( root->left ), run( root->right )) : run( root->left )) :
                            run( root->right )) + 1;
}

C++ 解法, 执行用时: 4ms, 内存消耗: 728KB, 提交时间: 2022-02-11

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int run(TreeNode* root) {
        // write code here
        if (!root) return 0;
        queue<TreeNode *> q;
        q.push(root);
        int depth = 0;
        while(!q.empty()) {
            int sz = q.size();
            depth += 1;
            for (int i = 0; i < sz; ++i) {
                auto 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 0;
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 736KB, 提交时间: 2022-01-20

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int run(TreeNode* root) {
        // write code here
        if(root == nullptr)
            return 0;
        if(root->left == nullptr && root->right == nullptr)
            return 1;
        int left = run(root->left);
        int right = run(root->right);
        
        if(root->left == nullptr && root->right != nullptr)
            return right+1;
        if(root->left != nullptr && root->right == nullptr)
            return left+1;
        return min(left,right)  + 1;
        
        
            
        
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 768KB, 提交时间: 2022-08-06

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int run(TreeNode* root) {
        // write code here
        if(root == nullptr){return 0;}
        if(root->left == nullptr && root->right == nullptr){
            return 1;
        }
        int min_depth = 1e8;
        
        if(root->left!=nullptr){
            min_depth = min(min_depth, run(root->left));
        }
        if(root->right!=nullptr){
            min_depth = min(min_depth, run(root->right));
        }
        return min_depth + 1;
    }
};

C++ 解法, 执行用时: 4ms, 内存消耗: 768KB, 提交时间: 2022-06-21

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int run(TreeNode* root) {
        // write code here
        if(root==nullptr) return 0;
        if(root->left==nullptr && root->right==nullptr) return 1;
        int minDepth=1e9;
        if(root->left!=nullptr) minDepth=min(minDepth, run(root->left));
        if(root->right!=nullptr) minDepth=min(minDepth, run(root->right));
        return minDepth+1;
    }
};

上一题