题目:建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序),将遍历序列输出到显示器上。
【基本要求】从键盘输入一棵二叉树的先序序列,以二叉链表作为存储结构,建立二叉树并对其进行遍历(先序、中序和后序),然后将遍历结果打印输出。
代码如下:
#include<stdio.h>
#include<stdlib.h>
//定义二叉树链表结点结构
typedef struct Node
{
char data;
struct Node* Lchild;
struct Node* Rchild;
}BiTree, * PBiTree;
//创建二叉树
void CreateBiTree(PBiTree* bt) //此时bt为二级指针
{
char ch;
ch = getchar();
if (ch == '*')
{
*bt = NULL;
}
else
{
*bt = (PBiTree)malloc(sizeof(BiTree));
(*bt)->data = ch;
CreateBiTree(&((*bt)->Lchild)); //一级指针值为空,二级指针要把地址传入
CreateBiTree(&((*bt)->Rchild));
}
}
//先序遍历
void PreOrder(PBiTree root)
{
if (root != NULL)
{
printf("%c", root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
//中序遍历
void InOrder(BiTree* root)
{
if (root != NULL)
{
InOrder(root->Lchild);
printf("%c", root->data);
InOrder(root->Rchild);
}
}
//后序遍历
void PostOrder(BiTree* root)
{
if (root != NULL)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
printf("%c", root->data);
}
}
int main()
{
PBiTree bt = NULL;//创建一个空树
printf("输入先序二叉树结点(子树为空输入*):\n");
CreateBiTree(&bt);
printf("\n输出先序遍历:");
PreOrder(bt);
printf("\n输出中序遍历:");
InOrder(bt);
printf("\n输出后序遍历:");
PostOrder(bt);
return 0;
}
运行结果: