1、运行时从键盘输入先序序列,创建对应二叉树 T,然后对 T 进行非递归中序遍历、递归后序遍历和层序遍历,使用c语言二叉树实现
时间: 2025-01-12 17:58:04 浏览: 50
好的,我来为您提供一个使用C语言实现二叉树创建和非递归中序遍历、递归后序遍历以及层序遍历的完整代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树的函数
TreeNode* createTree() {
char ch;
scanf(" %c", &ch);
if (ch == '#') return NULL;
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = ch;
node->left = createTree();
node->right = createTree();
return node;
}
// 非递归中序遍历
void inorderTraversal(TreeNode* root) {
TreeNode* stack[100];
int top = -1;
TreeNode* current = root;
while (current != NULL || top != -1) {
while (current != NULL) {
stack[++top] = current;
current = current->left;
}
current = stack[top--];
printf("%c ", current->data);
current = current->right;
}
}
// 递归后序遍历
void postorderTraversal(TreeNode* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%c ", root->data);
}
// 层序遍历
void levelOrderTraversal(TreeNode* root) {
TreeNode* queue[100];
int front = 0, rear = 0;
if (root == NULL) return;
queue[rear++] = root;
while (front < rear) {
TreeNode* current = queue[front++];
printf("%c ", current->data);
if (current->left != NULL) queue[rear++] = current->left;
if (current->right != NULL) queue[rear++] = current->right;
}
}
// 主函数
int main() {
printf("请输入二叉树的先序序列(用#表示空节点):\n");
TreeNode* root = createTree();
printf("非递归中序遍历结果:\n");
inorderTraversal(root);
printf("\n");
printf("递归后序遍历结果:\n");
postorderTraversal(root);
printf("\n");
printf("层序遍历结果:\n");
levelOrderTraversal(root);
printf("\n");
return 0;
}
```
这段代码实现了以下功能:
1. 从键盘输入二叉树的先序序列创建二叉树。
2. 实现非递归中序遍历。
3. 实现递归后序遍历。
4. 实现层序遍历。
使用这段代码,您可以输入二叉树的先序序列,然后程序会输出该二叉树的中序、后序和层序遍历结果。
阅读全文
相关推荐


















