//线索树找*p的中序后继且中序遍历 二叉线索树
#define thread 1
#define link 0
typedef struct Bt{
char data;
struct Bt *lc;//左孩子
struct Bt *rc;//右孩子
struct Bt *ltag;//左标识
struct Bt *rtag;//右标识
}*Bt;
Bt SBack(Bt p);//找后继
//中序
void mider(Bt p)
{
while(p->lc == link)
{
p = p->lc;
}
do
{
printf("%c",p->data);
p = SBack(p);
}while(p != NULL);
return;
}
//找后继
Bt SBack(Bt p)
{
if(p->rtag == thread)//如果是中序线索 那么线索所指即为 后继
{
return p->rc;
}
//否则是孩子 则找其孩子子树的最左结点
Bt t = p->rc;
while(p->rtag == link)//找最右子树
{
while(t->ltag == link)//找最右子树的 左子树(如果有)
{
t = t->lc;
}
}
return t;
}
线索树找*p的中序后继且中序遍历 二叉线索树
于 2022-03-05 16:34:10 首次发布