c语言函数表达二叉树算法层次遍历
时间: 2023-07-26 12:15:46 浏览: 100
C语言中二叉树树的层次遍历
下面是用 C 语言实现二叉树层次遍历的函数:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
typedef struct QueueNode {
TreeNode *node;
struct QueueNode *next;
} QueueNode;
typedef struct Queue {
QueueNode *front;
QueueNode *rear;
} Queue;
void initQueue(Queue *queue) {
queue->front = NULL;
queue->rear = NULL;
}
int isEmpty(Queue *queue) {
return queue->front == NULL;
}
void enqueue(Queue *queue, TreeNode *node) {
QueueNode *newNode = (QueueNode*) malloc(sizeof(QueueNode));
newNode->node = node;
newNode->next = NULL;
if (isEmpty(queue)) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
TreeNode* dequeue(Queue *queue) {
if (isEmpty(queue)) {
return NULL;
}
TreeNode *node = queue->front->node;
QueueNode *temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return node;
}
void levelOrderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
Queue queue;
initQueue(&queue);
enqueue(&queue, root);
while (!isEmpty(&queue)) {
TreeNode *node = dequeue(&queue);
printf("%d ", node->val);
if (node->left != NULL) {
enqueue(&queue, node->left);
}
if (node->right != NULL) {
enqueue(&queue, node->right);
}
}
}
```
这个函数使用队列来实现二叉树的层次遍历。它首先将根节点加入到队列中,然后进入一个循环,每次从队列中取出一个节点,并输出它的值,然后将它的左右子节点加入到队列中。
注意,这里的队列实现使用了链表来存储节点,因为数组实现的队列需要指定队列的最大长度,而链表实现的队列则可以动态扩展。
阅读全文