当前位置: 首页 > news >正文

leetcode 513.找树左下角的值

1.题目要求:
代码块:

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。

在这里插入图片描述
2.此题思路:
1.创建队列,出队函数和入队函数:

//创建队列
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.创建两个数组,一个用于层序遍历,一个用于记录树每层的结点个数:

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. 层序遍历:
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.取记录行结点数的数组的最后一个,最后让另一个数组,从后向前走,直到 等于记录节点数的最后一个:

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

全部代码:

/*** 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;
}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分布式锁-redisson锁重试和WatchDog机制
  • LabVIEW多线圈电磁式振动发电机测试
  • Python3 第三十九课 -- 实例八
  • 对于相同网段的IP,部分无法ping通问题
  • 测试管理工具、自动化测试工具、跨浏览器测试工具 推荐
  • ES中聚合查询之date_histogram查询出现key_as_string 和 key含义
  • 从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router、pinia、echarts
  • 爬虫学习1:初学者简单了解爬虫的基本认识和操作(详细参考图片)
  • php_webshell免杀--从0改造你的AntSword
  • MySQL补充性文件
  • recursion depth exceeded” error
  • 【Linux常用命令】之sed命令
  • 设计模式在FileBrowser中的几个应用
  • CTF-Web习题:2019强网杯 UPLOAD
  • 1.2.2、练习题之十进制转二进制
  • [deviceone开发]-do_Webview的基本示例
  • 【译】理解JavaScript:new 关键字
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android交互
  • Docker下部署自己的LNMP工作环境
  • iOS 颜色设置看我就够了
  • JavaScript对象详解
  • Python十分钟制作属于你自己的个性logo
  • 记一次和乔布斯合作最难忘的经历
  • 马上搞懂 GeoJSON
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 面试遇到的一些题
  • 前端自动化解决方案
  • 十年未变!安全,谁之责?(下)
  • 思维导图—你不知道的JavaScript中卷
  • 学习使用ExpressJS 4.0中的新Router
  • 异步
  • 正则表达式
  • ​secrets --- 生成管理密码的安全随机数​
  • ​低代码平台的核心价值与优势
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • (0)Nginx 功能特性
  • (C++20) consteval立即函数
  • (二十四)Flask之flask-session组件
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (四)鸿鹄云架构一服务注册中心
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net程序帮助文档制作
  • .net分布式压力测试工具(Beetle.DT)
  • .net连接MySQL的方法
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Bean, @Component, @Configuration简析
  • [] 与 [[]], -gt 与 > 的比较
  • [CSS] 点击事件触发的动画
  • [EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件
  • [FTP]pureftp部署和优化