编写程序实现二叉树的创建,三种遍历自己销毁
#include <myhd.h>
typedef char datatype;
typedef struct Node
{
struct Node *lchild;
datatype data;
struct Node *rchild;
}*Btree;
Btree create_node()
{
Btree t = (Btree)malloc(sizeof(struct Node));
if(NULL == t)
return NULL;
t->data = 0;
t->lchild = t->rchild = NULL;
return t;
}
Btree create_tree()
{
datatype element;
printf("please enter element:");
scanf(" %c",&element);
if(element == '#')
return NULL;
Btree tree = create_node();
tree->data = element;
tree->lchild = create_tree();
tree->rchild = create_tree();
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 = create_tree();
printf("first_output:");
first_output(tree);
printf("\n");
printf("mid_output:");
mid_output(tree);
printf("\n");
printf("last_output:");
last_output(tree);
printf("\n");
free_space(tree);
return 0;
}
linux@linux:~/hanjiazuoye/numstr$ ./a.out
please enter element:o
please enter element:a
please enter element:#
please enter element:y
please enter element:r
please enter element:#
please enter element:#
please enter element:#
please enter element:b
please enter element:f
please enter element:3
please enter element:#
please enter element:W
please enter element:7
please enter element:#
please enter element:#
please enter element:#
please enter element:#
please enter element:#
first_output:oayrbf3W7
mid_output:aryo37Wfb
last_output:rya7W3fbo