二叉树中序线索化(递归)

算法:与中序遍历算法类似,只要将遍历算法中访问结点的操作具体为把当前访问的结点与其非空中序前驱结点线索化。

           设置一前驱结点pre(初始值为NULL),始终指向刚刚访问过的结点;设置p指针指向当前正在访问的结点。pre为p的前驱,而p为pre的后继。

01typedef enum{Link,Thread}PointerTag;
02typedef struct node{
03        ElemType data;
04        PointerTag ltag,rtag;
05        struct node lchild,rchild;
06} *BinTree;
07BinTree pre=NULL;
08void InOrderThreading(BinTree t)
09{
10    if(t)
11    {
12        InOrderThreading(t->lchild);//左子树线索化
13        //以下建立正在访问结点与其前驱结点之间的线索
14        t->ltag=(t->lchild)?Link:Thread;
15        t->rtag=(t->rchild)?Link:Thread;
16        if(pre)
17        {
18             if(pre->rtag==Thread)
19                 pre->rchild=t;
20             if(t->ltag==Thread)
21                 t->lchild=pre;
22        }
23        pre=t;
24        InOrderThreading(t->rchild);//右子树线索化
25    }
26}

转载于:https://my.oschina.net/taisha/blog/36325

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值