帮我用C语言写一个二叉树操作的程序(1)编写二叉树的基本操作函数。①创建一棵二叉树 CreateBiTree(BiTree *T); ②先序遍历,递归方法 re_PreOrder(BiTree * tree ) ③中序遍历,递归方法 re_MidOrder(BiTree * tree ) ④后序遍历,递归方法 re_PostOrder(BiTree * tree )(2)调用上述函数实现下列操作。 用递归方法分别先序、中序和后序遍历二叉树; 注意 要求动态显示二叉树的建立过程。
时间: 2024-01-22 16:20:51 浏览: 78
好的,以下是一个简单的二叉树操作程序,包含了二叉树的基本操作函数和遍历函数。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} BiTree;
void CreateBiTree(BiTree **T) {
int val;
scanf("%d", &val);
if (val == -1) {
*T = NULL;
return;
}
*T = (BiTree*)malloc(sizeof(BiTree));
(*T)->data = val;
printf("input left child of %d: ", val);
CreateBiTree(&((*T)->left));
printf("input right child of %d: ", val);
CreateBiTree(&((*T)->right));
}
void re_PreOrder(BiTree *T) {
if (T == NULL) {
return;
}
printf("%d ", T->data);
re_PreOrder(T->left);
re_PreOrder(T->right);
}
void re_MidOrder(BiTree *T) {
if (T == NULL) {
return;
}
re_MidOrder(T->left);
printf("%d ", T->data);
re_MidOrder(T->right);
}
void re_PostOrder(BiTree *T) {
if (T == NULL) {
return;
}
re_PostOrder(T->left);
re_PostOrder(T->right);
printf("%d ", T->data);
}
int main() {
BiTree* tree = NULL;
printf("input root node: ");
CreateBiTree(&tree);
printf("preorder traversal: ");
re_PreOrder(tree);
printf("\nmidorder traversal: ");
re_MidOrder(tree);
printf("\npostorder traversal: ");
re_PostOrder(tree);
return 0;
}
```
在运行程序时,用户需要输入每个节点的值,并按照先序遍历的方式输入。当输入值为-1时,表示该节点为空。例如,下面是一个输入二叉树的样例:
```
input root node: 1
input left child of 1: 2
input left child of 2: -1
input right child of 2: -1
input right child of 1: 3
input left child of 3: -1
input right child of 3: -1
```
这个样例输入的二叉树长这样:
```
1
/ \
2 3
```
在程序运行时,会动态地显示二叉树的建立过程。例如,在输入左子树的时候,程序会要求用户输入左子树的根节点,然后进入左子树的递归创建过程。在输入右子树的时候,程序也会类似地要求用户输入右子树的根节点,然后进入右子树的递归创建过程。这样,用户就可以很直观地看到二叉树的创建过程了。
阅读全文