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

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

相关推荐
JieE21213 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack202 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树2 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2123 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2123 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术3 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦3 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050733 天前
(一)小红的数组操作
算法·编程语言