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];
}

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

相关推荐
小王不爱笑1321 小时前
G1 GC 的核心基础:Region 模型的补充细节
java·jvm·算法
小王不爱笑1322 小时前
三色标记算法
算法
小O的算法实验室2 小时前
2026年AST SCI1区TOP,基于速度障碍法的多无人机三维避障策略,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
AlenTech2 小时前
141. 环形链表 - 力扣(LeetCode)
数据结构·leetcode·链表
U-52184F693 小时前
深入理解“隐式共享”与“写时复制”:从性能魔法到内存深坑
java·数据库·算法
pp起床3 小时前
Part02:基本概念以及基本要素
大数据·人工智能·算法
lzh200409193 小时前
红黑树详解
算法
迈巴赫车主3 小时前
蓝桥杯20560逃离高塔
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
泯仲3 小时前
Ragent项目7种设计模式深度解析:从源码看设计模式落地实践
java·算法·设计模式·agent
dulu~dulu3 小时前
算法---寻找和为K的子数组
笔记·python·算法·leetcode