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

力扣面试题 31 - 特定深度节点链表 C语言解法

题目:

给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。

示例:

输入:[1,2,3,4,5,null,7,8]1/  \ 2    3/ \    \ 4   5    7/8输出:[[1],[2,3],[4,5,7],[8]]

思路:

  1. 队列辅助层次遍历:使用一个队列来处理树的层次遍历,将每一层节点逐一入队和出队。
  2. 链表构建:对于每一层,创建一个单独的链表,逐一添加节点到链表末尾。
  3. 结果存储:将每层的链表存入结果数组中,并记录链表数量。

代码如下:(不得不说,C语言真的是麻烦死了)

不懂的可以在评论区问我噢~

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/
// Queue node definition for BFS
struct QueueNode {struct TreeNode *treeNode;struct QueueNode *next;
};// Queue structure for BFS
struct Queue {struct QueueNode *front;struct QueueNode *rear;
};// Function to create a new queue
struct Queue* createQueue() {struct Queue *queue = (struct Queue*)malloc(sizeof(struct Queue));queue->front = queue->rear = NULL;return queue;
}// Enqueue operation
void enqueue(struct Queue *queue, struct TreeNode *treeNode) {struct QueueNode *newNode = (struct QueueNode*)malloc(sizeof(struct QueueNode));newNode->treeNode = treeNode;newNode->next = NULL;if (queue->rear) {queue->rear->next = newNode;}queue->rear = newNode;if (!queue->front) {queue->front = newNode;}
}// Dequeue operation
struct TreeNode* dequeue(struct Queue *queue) {if (!queue->front) return NULL;struct QueueNode *temp = queue->front;struct TreeNode *treeNode = temp->treeNode;queue->front = queue->front->next;if (!queue->front) {queue->rear = NULL;}free(temp);return treeNode;
}// Check if the queue is empty
int isQueueEmpty(struct Queue *queue) {return queue->front == NULL;
}// Main function
struct ListNode** listOfDepth(struct TreeNode* tree, int* returnSize) {if (!tree) {*returnSize = 0;return NULL;}// Allocate memory for result arraystruct ListNode** result = (struct ListNode**)malloc(1000 * sizeof(struct ListNode*)); // Assuming max depth is 1000*returnSize = 0;struct Queue *queue = createQueue();enqueue(queue, tree);while (!isQueueEmpty(queue)) {int levelSize = 0;struct ListNode *levelHead = NULL, *levelTail = NULL;struct Queue *tempQueue = createQueue();// Process all nodes at the current levelwhile (!isQueueEmpty(queue)) {struct TreeNode *currentNode = dequeue(queue);struct ListNode *newListNode = (struct ListNode*)malloc(sizeof(struct ListNode));newListNode->val = currentNode->val;newListNode->next = NULL;if (!levelHead) {levelHead = newListNode;} else {levelTail->next = newListNode;}levelTail = newListNode;levelSize++;if (currentNode->left) enqueue(tempQueue, currentNode->left);if (currentNode->right) enqueue(tempQueue, currentNode->right);}// Append the level's linked list to the resultresult[*returnSize] = levelHead;(*returnSize)++;// Swap queuesstruct Queue *swapTemp = queue;queue = tempQueue;free(swapTemp);}// Cleanupfree(queue);return result;
}

http://www.lryc.cn/news/498386.html

相关文章:

  • WordPress阅读文章显示太慢的处理
  • 关于多个线程共享一个实例对象
  • 【C++】printf 函数详解与格式化输出控制
  • HDFS 操作命令
  • html ul li 首页渲染多条数据 但只展示八条,其余的数据全部隐藏,通过icon图标 进行展示
  • Facebook:筑牢隐私安全堡垒,守护社交净土
  • 2024年构建PHP应用开发环境
  • Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链
  • 一、测试工具LoadRunner Professional脚本编写-录制前设置
  • React Native 组件详解之SectionList、StatusBar、Switch、Text 、 TextInput
  • 阿里云:aliyun-cli和ali-instance-cli
  • Linux 远程连接服务
  • Docker 安装和使用
  • web基础和http协议 附:nginx服务的安装
  • springboot利用easypoi实现简单导出Excel
  • 【前端新手小白】学习Javascript的【开源好项目】推荐
  • CentOS7虚拟机 网络适配器 NAT模式和桥接模式区别
  • sql删除冗余数据
  • STM32-C语言基础知识
  • 【Point-LIO】基于Ubuntu20.04的ROS1平台的Point-LIO部署Mid-360激光雷达
  • 02_Node.js模块化
  • 网络——HTTP与HTTPS三次握手和四次挥手
  • ModelScope-Agent(1): 基于开源大语言模型的可定制Agent系统
  • 开发知识点-uniCloud
  • Redis——主从复制原理
  • MATLAB数学建模之画图汇总
  • Milvus attu - docker 使用 及 版本兼容
  • okHttp的tcp连接池的复用
  • nginx 自启动失败:Failed to parse PID from file: Invalid argument
  • Wwise SoundBanks内存优化