运行时从键盘输入先序序列,创建对应二叉树T,然后对T进行非递归中序遍历、递归后序遍历和层序遍历。C语言数据结构完整代码
时间: 2025-01-01 17:36:14 浏览: 53
在C语言中,为了实现这个功能,你需要定义一个二叉树节点的数据结构,以及函数来处理输入、构建二叉树、遍历等操作。以下是关键部分的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 用于空结点的指针
TreeNode* NULL_NODE = (TreeNode*)malloc(sizeof(TreeNode));
// 先序遍历(根左右)
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 打印当前节点值
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
// 中序遍历(根左右)
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d ", root->val); // 打印当前节点值
inorderTraversal(root->right);
}
}
// 后序遍历(根右左)
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val); // 打印当前节点值
}
}
// 层次遍历(广度优先搜索)
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
printf("%d ", node->val); // 打印当前节点值
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
int main() {
// 从键盘输入先序遍历序列
char input[100];
scanf(" %s", input);
// 根据输入构建二叉树
// 这里假设输入是一个合法的先序序列,你可以根据实际需求添加解析输入的代码
// 假设已有一个函数parsePreorder(input, &root),它会创建并返回一个表示输入序列的二叉树
TreeNode* root = parsePreorder(input, &root);
// 遍历并打印结果
printf("Preorder Traversal: ");
preorderTraversal(root);
printf("\n");
printf("Inorder Traversal: ");
inorderTraversal(root);
printf("\n");
printf("Postorder Traversal: ");
postorderTraversal(root);
printf("\n");
printf("Level Order Traversal: ");
levelOrderTraversal(root);
printf("\n");
// 清理内存
free(root);
return 0;
}
```
阅读全文
相关推荐


















