线索二叉树的完整代码,可直接运行
代码如下:
//线索二叉树
#include<stdlib.h>
#include<stdio.h>
typedef char TElemType;
typedef enum {Link,Thread} PointerTag;
typedef struct BiThrNode
{
TElemType data;
struct BiThrNode *lchild,*rchild;
PointerTag LTag;
PointerTag RTag;
}BiThrNode, *BiThrTree;
BiThrTree pre=NULL;
//中序遍历线索化的递归函数
void InThreading(BiThrTree p)
{
if(p)
{
InThreading(p->lchild);
printf("%c",p->data);
if(!p->lchild)
{
p->LTag=Thread;
p->lchild=pre;
}
if(!p->rchild)
{
pre->RTag=Thread;
pre->rchild=p;
}
pre=p;
InThreading(p->rchild);
}
}
//建立头指针,使其左指针指向根结点,右指针指向遍历的最后一个结点
void InOrder_Thr(BiThrTree *Thr,BiThrTree T)
{
*Thr=(BiThrTree)malloc(sizeof(BiThrNode));
(*Thr)->LTag=Link;
(*Thr)->RTag=Thread;
(*Thr)->rchild=*Thr;
if(!T)
(*Thr)->lchild=*Thr;
else
{
(*Thr)->lchild=T;
pre=*Thr;
InThreading(T);
pre->RTag=Thread;
pre->rchild=*Thr;
(*Thr)->rchild=pre;
}
}
//按前序输入二叉树
void CreateBiTree(BiThrTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{
*T=(BiThrTree)malloc(sizeof(BiThrNode));
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
void main()
{
BiThrTree T,Thr=NULL;
printf("请输入你想建立的二叉树");
CreateBiTree(&T);
InOrder_Thr(&T,T);
}
以上是最基本的代码,是看《大话数据结构》时根据书上代码编写的,适合最最基础的人看,有问题可以评论,同是菜鸟,我们一起讨论嘛~