编写程序实现二叉树的创建,三种遍历自己销毁
#include <myhead.h>
typedef struct Node //二叉树的节点结构
{
char data;
struct Node *lchild, * rchild; //左右孩子指针
}* Btree;
//创建节点
Btree create_node()
{
Btree tree=(Btree)malloc(sizeof(struct Node));
if(NULL ==tree)
return NULL;
//新节点tree的数据域
tree->data=0;
//tree的指针域:
tree->lchild=tree->rchild=NULL;
return tree;
}
//创建二叉树
Btree tree_create()
{
char element;
Btree tree=create_node();
printf("请输入字符:");
scanf("%c",&element);
getchar();
if(element == '#')
{
return NULL;
}
tree->data=element;
tree->lchild=tree_create();
tree->rchild=tree_create();
return tree;
}
//前序遍历
void first_output(Btree tree)
{
if(NULL == tree)
return ;
printf("%c",tree->data);
first_output(tree->lchild);
first_output(tree->rchild);
}
//中序遍历
void mid_output(Btree tree)
{
if(NULL ==tree)
return;
mid_output(tree->lchild);
printf("%c",tree->data);
mid_output(tree->rchild);
}
//后序遍历
void last_output(Btree tree)
{
if(NULL ==tree)
return;
last_output(tree->lchild);
last_output(tree->rchild);
printf("%c",tree->data);
}
//二叉树释放
Btree free_space(Btree tree)
{
if(NULL ==tree)
return NULL;
free_space(tree->lchild);
free_space(tree->rchild);
free(tree);
tree=NULL;
}
int main(int argc, const char *argv[])
{
Btree tree=NULL;
tree=tree_create();
printf("前序遍历:");
first_output(tree);//前序遍历
puts("");
printf("中序遍历:");
mid_output(tree);//中序遍历
puts("");
printf("后序遍历:");
last_output(tree);//后序遍历
puts("");
free_space(tree);
return 0;
}