您的位置:首页 > 其它

二叉树二叉树虐我千万遍劳资今天终于搞明白了哈哈哈哈哈

2015-12-17 17:26 316 查看
#include <stdio.h>
#include <stdlib.h>
typedef char TElmType;
typedef struct BiNode{
TElmType data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
TElmType ch;
scanf("%c",&ch);
if (ch=='#') {
*T=NULL;
}
else{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
void ProTraverse(BiTree *T)
{
if(*T){
printf("%c",(*T)->data);
ProTraverse(&((*T)->lchild));
ProTraverse(&((*T)->rchild));

}

}
void InTraverse(BiTree *T)
{
if(*T){
InTraverse(&((*T)->lchild));
printf("%c",(*T)->data);
InTraverse(&((*T)->rchild));

}
}
void PostTraverse(BiTree *T)
{
if(*T){
PostTraverse(&((*T)->lchild));
PostTraverse(&((*T)->rchild));
printf("%c",(*T)->data);
}

}
void DestroyBiTree(BiTree *T)
{
if (*T) {
if ((*T)->lchild)         DestroyBiTree(&((*T)->lchild));
if ((*T)->rchild)         DestroyBiTree(&((*T)->rchild));
free(*T);
*T=NULL;
}
}
int IsEmptyTree(BiTree *T)
{
if ((*T)==NULL) {
return 0;
}
else
return 1;
}
int main()
{
BiTree T;
printf("按照前序遍历的方法输入一棵树:\n");
CreateBiTree(&T);
printf("前序遍历:\n");
ProTraverse(&T);
printf("\n");
printf("中序遍历:\n");
InTraverse(&T);
printf("\n");
printf("后序遍历:\n");
PostTraverse(&T);
printf("\n");
printf("销毁前:\n");
int status=IsEmptyTree(&T);
if (status) {
printf("Not Empty\n");
}
else
printf("Empty\n");
printf("销毁后:\n");
DestroyBiTree(&T);
status=IsEmptyTree(&T);
if (status) {
printf("Not Empty\n");
}
else
printf("Empty\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: