web程序设计c语言实现一个用先序扩展二叉树序列构造二叉树的类,同时包含先序后序中序的输出。
时间: 2024-10-27 17:06:29 浏览: 24
在C语言中,我们可以创建一个名为`BinaryTree`的类来表示二叉树,使用结构体存储节点信息,并实现先序遍历、后序遍历和中序遍历的方法。首先,我们需要定义一个二叉树节点结构:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
接下来,我们创建`BinaryTree`类,并实现相关功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 创建新节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 先序遍历
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
// 后序遍历
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%d ", root->val);
}
}
// 中序遍历
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->val);
inOrderTraversal(root->right);
}
}
// 根据先序遍历序列构建二叉树
TreeNode* buildTreeFromPreorder(int* preorder, int n) {
if (n == 0) return NULL;
TreeNode* root = createNode(preorder[0]);
TreeNode* index = root;
for (int i = 1; i < n; ++i) {
if (preorder[i] < preorder[0]) { // 左子树递归
index->left = buildTreeFromPreorder(&preorder[i], n - i);
} else { // 右子树递归
index->right = buildTreeFromPreorder(&preorder[i], n - i);
break;
}
index = index->right; // 更新当前处理的节点
}
return root;
}
int main() {
int preorder[] = {1, 2, 4, 5, 3};
int n = sizeof(preorder) / sizeof(preorder[0]);
TreeNode* root = buildTreeFromPreorder(preorder, n);
printf("先序遍历: ");
preOrderTraversal(root);
printf("\n");
printf("后序遍历: ");
postOrderTraversal(root);
printf("\n");
printf("中序遍历: ");
inOrderTraversal(root);
printf("\n");
free(root); // 释放内存
return 0;
}
```
在这个`BinaryTree`类中,我们首先实现了创建节点、三种基本的遍历方法,然后提供了一个`buildTreeFromPreorder`函数,根据给定的先序遍历序列重建对应的二叉树。
在`main`函数中,我们创建了一个示例的先序遍历数组,然后构建了二叉树并打印出其前序、后序和中序遍历结果。
阅读全文