1、运行时从键盘输入先序序列,创建对应二叉树T,然后对T进行非递归中序遍历、递归后序遍历和层序遍历。使用c语言实现
时间: 2025-01-03 16:44:00 浏览: 13
在C语言中,我们可以使用结构体表示二叉树节点,并结合递归和队列数据结构来实现非递归的中序、后序和层序遍历。这里给出一个简单的例子,首先我们需要定义二叉树节点:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 非递归中序遍历
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->val); // 中序打印节点值
inorderTraversal(root->right);
}
// 递归后序遍历
void postorderTraversal(TreeNode* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val); // 后序打印节点值
}
// 使用广度优先搜索(BFS)实现层序遍历
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);
}
}
```
为了从用户输入创建二叉树,你需要编写函数读取先序遍历序列并构造二叉树。这里仅提供一个基础示例,实际过程中可能需要更复杂的算法解析输入:
```c
// 示例函数,假设输入是字符串形式的先序遍历
TreeNode* buildTreeFromPreorder(char* preorderStr) {
// 实现细节略去...
// 分别处理空字符串、单元素、以及一般情况
// 使用栈来辅助构建二叉树
return NULL; // 返回根节点
}
int main() {
char* preorderInput = "4,2,5,1,6,3"; // 用户输入示例,假设是先序遍历
TreeNode* root = buildTreeFromPreorder(preorderInput);
printf("Non-recursive Inorder Traversal: ");
inorderTraversal(root);
printf("\n");
printf("Recursive Postorder Traversal: ");
postorderTraversal(root);
printf("\n");
printf("Level Order Traversal: ");
levelOrderTraversal(root);
printf("\n");
return 0;
}
```
请注意,上述代码仅为基本框架,实际应用中需要根据具体的输入格式调整`buildTreeFromPreorder`函数。同时,对于大型项目,建议将以上功能封装成独立的函数模块以便于维护。
阅读全文