根据你的意思,你的访问序列有问题,应该是:A(B(D,F),C(H),),)
这样才能得到你要的二叉树
参考代码如下,符合你的要求,VC6下编译通过:
#include<stdio.h>
typedef struct BiTree//存储链表存储结构
{
char data;
struct BiTree *lchild,*rchild;
}*BT;
BT create(BT T)//创建二叉链表
{
char ch;
printf("输入数据:\n");
ch = getchar();getchar();
if(ch == ')')
{
T=NULL;
return T;
}
else
{
T = (BT *)malloc(sizeof(BT));
T->data = ch;
}
printf("输入操作符:\n");
ch = getchar();getchar();
if(ch == '(')//左子树
{
T->lchild = create(T->lchild);
printf("输入操作符:\n");
ch = getchar();getchar();
if(ch == ',')//左子树访问后接着访问右子树
{
T->rchild = create(T->rchild);
}
else
{
printf("输入操作符有误:\n");
T->rchild = NULL;
}
}
else
{
if(ch == ',')//直接访问右子树,左子树置空
{
T->lchild = NULL;
T->rchild = create(T->rchild);
}
else
{
if(ch == ')')
{
T->lchild = NULL;
T->rchild = NULL;
}
else
{
printf("操作符输入有误:\n");
}
}
}
return T;
}
void PreOrder(BT T)//先序遍历
{
if(T != NULL)
{
Visit(T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
Visit(char a)
{
printf("%c\t",a);
}
main()
{
char ch;
BT T;
T = create(T);
PreOrder(T);
}
输入输出:
输入数据:
A
输入操作符:
(
输入数据:
B
输入操作符:
(
输入数据:
D
输入操作符:
,
输入数据:
F
输入操作符:
)
输入操作符:
,
输入数据:
C
输入操作符:
(
输入数据:
H
输入操作符:
)
输入操作符:
,
输入数据:
)
输入操作符:
,
输入数据:
)
A
B
D
F
C
H
Press any key to continue