线索二叉树结构定义:
typedef char TElemType; //元素的数据类型根据实际情况而定,这里假设为char
typedef struct Node //结点结构
{
TElemType data; //数据域,用于存储结点数据
struct Node *lchild; //指针,指向该结点的左孩子或前驱
struct Node *rchild; //指针,指向该结点的右孩子或后继
int ltag,rtag; //标志,指示指针指向左右孩子还是前驱后继
}BiThrNode,*BiThrTree;
创建函数:
//线索二叉树的先序建立
void CreateBiTree(BiThrTree * T)
{
char ch;
scanf("%c",&ch);
if (ch=='#') *T=NULL; //如果结点数据为空,则将指针指向空
else
{
*T=(BiThrTree)malloc(sizeof(BiThrNode)); //申请结点空间
if (!*T) exit(OVERFLOW);
(*T)->data=ch; //输入数据,生成根节点
(*T)->ltag=0; //初始化左右标志值
(*T)->rtag=0;
CreateBiTree(&((*T)->lchild)); //构造左子树
CreateBiTree(&((*T)->rchild)); //构造右子树
}
}
验证:
int main()
{
BiThrTree T1=NULL,T2=NULL;
printf("按先序遍历建立线索二叉树:\n");
CreateBiTree(&T1); //创建树T1
printf("\nT1创建成功\n");
printf("\n按先序遍历建立线索二叉树:\n");
CreateBiTree(&T2); //创建树T2
printf("\nT2创建成功\n");
return 0;
}
结果是T1可以创建,而T2却无法创建,为什么呢?两次输入的都是相同的先序遍历二叉树啊