用c语言编写一个程序,用链式存储方式构造二叉树,实现二叉树的基本操作(假设树的元素类型为char),并在此基础上设计一个主程序完成如下功能: (1)编写CreatBiTree函数,创建二叉树T; (2)编写PreOrder函数,先序遍历二叉树 (3)编写InOrder函数,中序遍历二叉树; (4)编写PostOrder函数,后序遍历二叉树; (5)编写PostTreeDepth函数,求二叉树的深度
时间: 2024-02-13 11:03:54 浏览: 56
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void CreateBiTree(BiTree *T){
char ch;
scanf("%c", &ch);
if(ch == '#') *T = NULL;
else{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
void PreOrder(BiTree T){
if(T){
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T){
if(T){
InOrder(T->lchild);
printf("%c ", T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T){
if(T){
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ", T->data);
}
}
int PostTreeDepth(BiTree T){
if(!T) return 0;
else{
int ldep = PostTreeDepth(T->lchild);
int rdep = PostTreeDepth(T->rchild);
return (ldep > rdep) ? (ldep + 1) : (rdep + 1);
}
}
int main(){
BiTree T;
printf("请输入二叉树(以#表示空节点):");
CreateBiTree(&T);
printf("先序遍历:");
PreOrder(T);
printf("\n");
printf("中序遍历:");
InOrder(T);
printf("\n");
printf("后序遍历:");
PostOrder(T);
printf("\n");
printf("二叉树的深度为:%d\n", PostTreeDepth(T));
return 0;
}
```
主函数中先调用CreateBiTree函数创建二叉树,然后分别调用PreOrder、InOrder、PostOrder函数进行先序、中序、后序遍历,最后调用PostTreeDepth函数求二叉树的深度。
阅读全文