用C语言实现二叉树的非递归层次遍历,输入二叉树后,输出层次遍历结果,输入格式为二叉树的先序遍历结果(-1表示空节点)
时间: 2024-01-23 18:20:27 浏览: 86
好的,我能理解您的问题。下面是C语言实现二叉树的非递归层次遍历的代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
typedef struct Queue {
TreeNode **data;
int front, rear;
} Queue;
Queue *createQueue() {
Queue *q = (Queue *)malloc(sizeof(Queue));
q->data = (TreeNode **)malloc(MAXSIZE * sizeof(TreeNode *));
q->front = q->rear = 0;
return q;
}
void enQueue(Queue *q, TreeNode *node) {
if (q->rear == MAXSIZE) return;
q->data[q->rear++] = node;
}
TreeNode *deQueue(Queue *q) {
if (q->front == q->rear) return NULL;
return q->data[q->front++];
}
TreeNode *createTree() {
int val;
scanf("%d", &val);
if (val == -1) return NULL;
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
void levelOrderTraversal(TreeNode *root) {
if (root == NULL) return;
Queue *q = createQueue();
enQueue(q, root);
while (q->front != q->rear) {
TreeNode *node = deQueue(q);
printf("%d ", node->val);
if (node->left) enQueue(q, node->left);
if (node->right) enQueue(q, node->right);
}
}
int main() {
TreeNode *root = createTree();
levelOrderTraversal(root);
return 0;
}
```
这份代码实现了二叉树的非递归层次遍历,使用了队列这种数据结构。在程序中,我们首先定义了一个`TreeNode`结构体表示二叉树节点,其中包含了节点的值、左右子树指针。然后定义了一个`Queue`结构体表示队列,其中包含了队列的数据、队头和队尾指针。接着实现了`createQueue`函数用于创建队列,`enQueue`函数用于入队,`deQueue`函数用于出队。之后实现了`createTree`函数用于创建二叉树,`levelOrderTraversal`函数用于进行二叉树的非递归层次遍历。最后在`main`函数中调用`createTree`函数创建二叉树,调用`levelOrderTraversal`函数进行非递归层次遍历并输出遍历结果。
希望这份代码能够帮到您,如果您还有其他问题,可以继续问我。
阅读全文