leetcode 513.找树左下角的值

1.题目要求:

代码块:

c 复制代码
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

 

2.此题思路:

1.创建队列,出队函数和入队函数:

c 复制代码
//创建队列
typedef struct queuet{
    struct TreeNode* value;
    struct queue* next;
}queue_t;
//入队
void push(queue_t** head,struct TreeNode* data){
    queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));
    newnode->value = data;
    newnode->next = NULL;
    if(*head == NULL){
        *head = newnode;
        return;
    }
    queue_t* tail = *head;
    while(tail->next != NULL){
        tail = tail->next;
    }
    tail->next = newnode;
}
//出队
struct TreeNode* pop(queue_t** head){
    struct TreeNode* x = (*head)->value;
    (*head) = (*head)->next;
    return x;
}

2.创建两个数组,一个用于层序遍历,一个用于记录树每层的结点个数:

c 复制代码
queue_t* enquence = NULL;
    int size = 0;
    int count = 1;//当前行的结点数
    int nextcount = 0;//记录树下一行的结点数
    int* number = (int*)malloc(sizeof(int) * 10000);//用来层序遍历
    int j1 = 0;
    int* low = (int*)malloc(sizeof(int) * 10000);//用来记录树每层的结点个数
    int j2 = 0;
  1. 层序遍历:
c 复制代码
push(&enquence,root);//入队
    size++;
    //进行层序遍历
    while(size != 0){ 
        for(int i = 0;i <  count;i++){
            struct TreeNode* temp = pop(&enquence);//出队
            size--;
            number[j1] = temp->val;//往数组里存入结点值
            j1++;
            if(temp->left != NULL){
                push(&enquence,temp->left);//入队
                nextcount++;//此代表下一行的节点数
                size++;
            }
            if(temp->right != NULL){
                push(&enquence,temp->right);//入队
                nextcount++;
                size++;
            }
        }
        low[j2] = count;
        j2++;
        count = nextcount;
        nextcount = 0;
    }

4.取记录行结点数的数组的最后一个,最后让另一个数组,从后向前走,直到 等于记录节点数的最后一个:

c 复制代码
count = low[j2 - 1];
    int count1 = 1;
    for(int i = j1 - 1;i >= 0;i--){
        if(count1 == count){
            return number[i]; 
        }
        count1++;
    }
    return 0;

全部代码:

c 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 //创建队列
typedef struct queuet{
    struct TreeNode* value;
    struct queue* next;
}queue_t;
//入队
void push(queue_t** head,struct TreeNode* data){
    queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));
    newnode->value = data;
    newnode->next = NULL;
    if(*head == NULL){
        *head = newnode;
        return;
    }
    queue_t* tail = *head;
    while(tail->next != NULL){
        tail = tail->next;
    }
    tail->next = newnode;
}
//出队
struct TreeNode* pop(queue_t** head){
    struct TreeNode* x = (*head)->value;
    (*head) = (*head)->next;
    return x;
}
int findBottomLeftValue(struct TreeNode* root) {
    queue_t* enquence = NULL;
    int size = 0;
    int count = 1;//当前行的结点数
    int nextcount = 0;//记录树下一行的结点数
    int* number = (int*)malloc(sizeof(int) * 10000);//用来层序遍历
    int j1 = 0;
    int* low = (int*)malloc(sizeof(int) * 10000);//用来记录树每层的结点个数
    int j2 = 0;
    push(&enquence,root);
    size++;
    //进行层序遍历
    while(size != 0){ 
        for(int i = 0;i <  count;i++){
            struct TreeNode* temp = pop(&enquence);
            size--;
            number[j1] = temp->val;
            j1++;
            if(temp->left != NULL){
                push(&enquence,temp->left);
                nextcount++;
                size++;
            }
            if(temp->right != NULL){
                push(&enquence,temp->right);
                nextcount++;
                size++;
            }
        }
        low[j2] = count;
        j2++;
        count = nextcount;
        nextcount = 0;
    }
    count = low[j2 - 1];
    int count1 = 1;
    for(int i = j1 - 1;i >= 0;i--){
        if(count1 == count){
            return number[i]; 
        }
        count1++;
    }
    return 0;
}

我这个时间复杂度较高,但大家如果觉得好的话,就请给个免费的赞吧,谢谢了

^ _ ^

相关推荐
CoovallyAIHub14 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP15 小时前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo15 小时前
半开区间和开区间的两个二分模版
算法
moonlifesudo15 小时前
300:最长递增子序列
算法
CoovallyAIHub20 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub21 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI2 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v2 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工2 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农2 天前
【React用到的一些算法】游标和栈
算法·react.js