LeetCode 671.二叉树第二小的结点

这个题我们可以用数组辅助完成,然后进行排序后,再用再进行取值,这是我的代码块:

c 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 void Preorder_trave(struct TreeNode* root,int* number,int* length)
 {
    if(root == NULL)
        return;
    number[(*length)++] = root->val;
    Preorder_trave(root->left,number,length);
    Preorder_trave(root->right,number,length);
 }
 int compare(const void* a,const void* b)
 {
    return *(int*)a - *(int*)b;
 }
int findSecondMinimumValue(struct TreeNode* root) {
	//创立数组
    int* number = (int*)malloc(sizeof(int) * 25);
    //创立数组长度
    int* length = (int*)malloc(sizeof(int));
    *length = 0;
    //使用前序遍历,把结点存入数组中
    Preorder_trave(root,number,length);
    int judge = number[0];
    int k = 0;
    int i = 0;
    //判断每个结点是否相同
    for(i = 0;i < *length;i++)
    {
        if(number[i] == judge)
            k++;
    }
    if(k == *length)
        return -1;
    //进行qsort排序
    qsort(number,*length,sizeof(int),compare);
    //取第二个最小的值
    for(i = 0;i < *length - 1;i++)
    {
        if(number[i] != number[i + 1])
            break;
    }
    return number[i + 1];
}

我这个方法比较通俗易懂,但时间复杂度比较高,大家如果觉得好的话,就请给个免费的赞吧!谢谢了^ _ ^

相关推荐
初夏睡觉1 小时前
原创题目 - 空壳恋爱
c++·算法·dp·oi·信息学·原创题目·值得挑战的题目
Buke..1 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法
闲研随记2 小时前
【文献阅读 ICLR 2026】RL算法:DECS
算法·llm·强化学习·iclr·rl
量化小c2 小时前
一行代码查 BTCUSDT 和 AAPL 最新价?QuantDash 统一多市场实时行情接口实战
后端·算法·github
机器人梦想家2 小时前
具身机器人视觉服务的异步回调与并发控制
数据库·算法·机器人
我命由我123453 小时前
人脸识别 - 人脸识别选帧
java·人工智能·python·算法·安全·java-ee·人脸识别
时针滴滴答啊3 小时前
最大子数组和
算法·leetcode·职场和发展
五月底_4 小时前
LIS算法
python·算法·最长子序列
Yfhonier4 小时前
【素数定理】素数个数的位数
c++·算法·素数
学学酱快乐4 小时前
2026年PMP考试生命周期选择决策树精讲:从需求判断到混合型统一框架的应试全攻略
算法·决策树·机器学习·pmp新版考试大纲·pmp新题型·pmp培训哪家好·pmp培训机构推荐