c语言按层次遍历二叉树代码
时间: 2023-09-06 07:04:56 浏览: 119
二叉树的层次遍历(c语言)
5星 · 资源好评率100%
### 回答1:
以下是 C 语言按层次遍历二叉树的代码,供您参考:
```
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
};
struct QueueNode {
struct TreeNode *node;
struct QueueNode *next;
};
void level_order_traversal(struct TreeNode *root) {
if (root == NULL) {
return;
}
// 创建队列
struct QueueNode *front = NULL;
struct QueueNode *rear = NULL;
// 根节点入队
struct QueueNode *node = (struct QueueNode *) malloc(sizeof(struct QueueNode));
node->node = root;
node->next = NULL;
front = node;
rear = node;
// 不断遍历队列
while (front != NULL) {
// 取出队首节点
struct TreeNode *current_node = front->node;
front = front->next;
free(node);
// 输出该节点的值
printf("%d ", current_node->data);
// 如果有左子节点,入队
if (current_node->left != NULL) {
node = (struct QueueNode *) malloc(sizeof(struct QueueNode));
node->node = current_node->left;
node->next = NULL;
rear->next = node;
rear = node;
}
// 如果有右子节点,入队
if (current_node->right != NULL) {
node = (struct QueueNode *) malloc(sizeof(struct QueueNode));
node->node = current_node->right;
node->next = NULL;
rear->next = node;
rear = node;
}
}
}
// 测试
int main() {
// 构建二叉树
struct TreeNode node1 = {1, NULL, NULL};
struct TreeNode node2 = {2, NULL, NULL};
struct TreeNode node3 = {3, NULL, NULL};
struct TreeNode node4 = {4, NULL, NULL};
struct TreeNode node5 = {5, NULL, NULL};
struct TreeNode node6 = {6, NULL, NULL};
struct TreeNode node7 = {7, NULL, NULL};
node1.left = &node2;
node1.right = &node3;
node2.left = &node4;
node2.right = &node5;
node3.left = &node6;
node3.right = &node7;
// 按层次遍历二叉树
level_order_traversal(&node1);
return 0;
}
```
注意,如果您有任何关于该代码的疑问或需求,请随时告诉我,我将竭诚为您服务。
### 回答2:
按层次遍历二叉树是一种广度优先搜索的方法,可以使用队列来实现。下面是C语言实现按层次遍历二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* left; // 左子节点指针
struct Node* right; // 右子节点指针
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 分配内存空间
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 按层次遍历二叉树
void levelOrderTraversal(Node* root) {
if (root == NULL)
return;
// 创建队列,并将根节点入队
Node** queue = (Node**)malloc(sizeof(Node*));
int front = 0; // 队列头指针
int rear = 0; // 队列尾指针
queue[rear++] = root;
while (front < rear) {
Node* current = queue[front++]; // 出队队首元素
// 访问当前节点
printf("%d ", current->data);
// 将当前节点的左右子节点入队
if (current->left != NULL)
queue[rear++] = current->left;
if (current->right != NULL)
queue[rear++] = current->right;
}
// 释放队列内存空间
free(queue);
}
int main() {
// 创建示例二叉树
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 按层次遍历二叉树
printf("按层次遍历二叉树结果:");
levelOrderTraversal(root);
return 0;
}
```
上述代码中,首先定义了二叉树节点的结构体,包含节点数据、左子节点指针和右子节点指针。然后,定义了用于创建新节点的函数`createNode()`。接下来,定义了按层次遍历二叉树的函数`levelOrderTraversal()`。在该函数中,创建了一个队列并将根节点入队,然后进行循环操作直到队列为空。在每一轮循环中,首先将队首元素出队并访问,然后将其左右子节点入队。最后,在主函数中创建了示例二叉树并调用`levelOrderTraversal()`函数来按层次遍历二叉树,并将结果打印输出。
### 回答3:
按层次遍历二叉树的代码可以使用队列来实现。首先将二叉树的根节点入队,然后开始循环,直到队列为空。在循环中,先取出队列的首个节点,访问该节点,并将其左右子节点分别入队。这样就可以保证按照层次遍历的顺序依次访问二叉树的每个节点。
下面是C语言实现按层次遍历二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树节点的定义
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 按层次遍历二叉树
void levelOrderTraversal(Node* root) {
// 创建一个队列用于存储节点
Node* queue[100];
int front = 0; // 队列的头指针
int rear = 0; // 队列的尾指针
// 根节点入队
queue[rear++] = root;
while (front < rear) {
Node* current = queue[front++];
printf("%d ", current->data);
// 左右子节点入队
if (current->left != NULL) {
queue[rear++] = current->left;
}
if (current->right != NULL) {
queue[rear++] = current->right;
}
}
}
int main() {
// 创建二叉树
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 按层次遍历二叉树
printf("按层次遍历二叉树结果:");
levelOrderTraversal(root);
return 0;
}
```
以上代码首先创建了一个二叉树,并使用`levelOrderTraversal`函数按照层次遍历的顺序输出二叉树节点的值。最后运行程序即可得到按层次遍历二叉树的结果。
阅读全文