首先定义二叉树链表的节点结构:
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
先序遍历创立二叉树链表,
void CreateBiTree(BiTree *T)
{
TElemType ch;
scanf("%c", &ch);
if(ch == '#')
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T)
exit(OVERFLOW);
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
上面的代码是当输入字符'#'时,当前节点为叶子,不再继续生成子节点,还要注意这个创建函数中的形参,是指向BiTree的指针,实际上是指向BiTNode的一个二级指针。
遍历函数如下:
前序遍历:
void PreOrderTraverse(BiTree T)
{
if(T == NULL)
return;
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
中序遍历:
void InOrderTraverse(BiTree T)
{
if(T == NULL)
return;
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}
后序遍历:
void PostOrderTraverse(BiTree T)
{
if(T == NULL)
return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}
验证代码:
BiTree Tree;
CreateBiTree(&Tree);
PreOrderTraverse(Tree);
cout << endl;
InOrderTraverse(Tree);
cout << endl;
PostOrderTraverse(Tree);
cout << endl;
这里需要注意的是CreateBiTree函数中输入的参数值,输入Tree的地址值。输出结果如下图所示: