二叉树的遍历初听起来,感觉很简单,但是一用到递归,就感觉非常虚,不实在,老方法。
自己在脑海里,纸上把他递归几遍,找到规律,就可以写出。同时,还有非递归的方法,在
我写完二叉搜索树后,感觉应该简单,有空写一下、
#include <stdio.h>
#include <stdlib.h>
typedef struct bitree_node bitree;
//创建二叉树
struct bitree_node
{
char elem;
bitree *lchild;
bitree *rchild;
};
bitree* CreatBitree()
{
char a;
bitree *bit;
bit=NULL;
scanf("%c",&a);
if(a=='#')
{
return bit;
}else{
bit=(bitree *)malloc(sizeof(bitree));
bit->elem=a;
bit->lchild=CreatBitree();
bit->rchild=CreatBitree();
return bit;
}
}
//先序遍历二叉树
void PreOrder(bitree *b)
{
if(b!=NULL)
{
printf("\t%c",b->elem);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
//中序遍历二叉树
void InOrder(bitree *b)
{
if(b!=NULL)
{
InOrder(b->lchild);
printf("\t%c",b->elem);
InOrder(b->rchild);
}
}
//后序遍历二叉树
void PostOrder(bitree *b)
{
if(b!=NULL)
{
PostOrder(b->lchild);
PostOrder(b->rchild);
printf("\t%c",b->elem);
}
}
int main ()
{
bitree *p=NULL;
p=CreatBitree();
PreOrder(p);
printf("\n");
InOrder(p);
printf("\n");
PostOrder(p);
printf("\n");
return 0;
}