话不多说,码来
二叉树存储的方式
typedef struct Node
{
char data;//存储数据
struct Node *LChild;//左儿子
struct Node *RChild;//右儿子
}BNode,*BTree;
以下的存储和遍历我们依照该图来说明
先序创建(难点)
这里的创建主要需要理解指针的传递,理解了就可以自己敲出来了
void CreatBTree(BTree * bt)//创建二叉树
{
char ch;
ch=getchar();
if(ch=='.')
{
*bt=NULL;
}
else
{
*bt=(BTree )malloc(sizeof(BNode));
(*bt)->data=ch;
CreatBTree(&((*bt)->LChild));
CreatBTree(&((*bt)->RChild));
}
}
//依次输入: AB.D..CE.F...来先序创建二叉树
遍历
二叉树的遍历 其实先序,中序,后序遍历都是差不多的,理解了先序遍历,后序和中序也就理解了
先序遍历
void PreOrder(BTree root)//先序遍历
{
if(root)
{
//先序遍历先输出根节点,再输出左子树,再输出右子树
printf("%c ",root->data);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
}
//输出:A B D C E F
中序遍历
void InOrder(BTree root)//中序遍历
{
if(root)
{
//中序序遍历先输出输出左子树,再输出根节点,最后再输出右子树
InOrder(root->LChild);
printf("%c ",root->data);
InOrder(root->RChild);
}
}
//输出:B D A E F C
后序遍历
void PostOrder(BTree root)//后序序遍历
{
if(root)
{
//中序序遍历先输出输出右子树,再输出根节点,最后再输出左子树
PostOrder(root->LChild);
PostOrder(root->RChild);
printf("%c ",root->data);
}
}
//输出:D B F E C A
验证
int main()
{
BTree bt;
CreatBTree(&bt);
PreOrder(bt);
printf("\n");
InOrder(bt);
printf("\n");
PostOrder(bt);
printf("\n");
return 0;
}
以下四行数据分别是先序输入创建二叉树,先序输出,中序输出,后续输出:
由于水平有限,本博客难免有不足,恳请各位不吝赐教!