1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| //建立双向线索链表 void InOrderThread_Head(BiThrTree *h, BiThrTree t) { //初始化头结点 (*h) = (BiThrTree)malloc(sizeof(BiThrNode)); if((*h) == NULL) { printf("申请内存失败"); return ; } (*h)->rchild = *h; (*h)->Rtag = Link; //如果树本身是空树 if(!t) { (*h)->lchild = *h; (*h)->Ltag = Link; } else { pre = *h;//pre 指向头结点 (*h)->lchild = t;//头结点左孩子设为树根结点 (*h)->Ltag = Link; InThreading(t);//线索化二叉树,pre 结点作为全局变量,线索化结束后,pre 结点指向中序序列中最后一个结点 pre->rchild = *h; pre->Rtag = Thread; (*h)->rchild = pre; } }
|