线索二叉树 (C++实现)

  • 线索二叉树就是在原有的二叉树上添加了两个tag属性,用来记录当前节点的线索
  • 如果ltag=0 lchild指向节点的左孩子
  • 如果ltag=1 lchild指向节点的前驱节点
  • 如果rtag=0 rchild指向节点的右孩子
  • 如果rtag=1 rchild指向节点的后继节点

因为先、中、后序的前驱跟后继节点会有区别,所以二叉树线索化需要分为三种序列的线索二叉树,这里以后序为例

typedef int datatype;

typedef struct BiThrNode{
    datatype data;
    BiThrNode *lchild,*rchild;
    unsigned ltag,rtag;
}BiThrNode,*BiThrTree;

BiThrTree pre=nullptr;

BiThrTree PostOrderThr(BiThrNode *p,BiThrNode *&pre){   //后序线索二叉树
    if(p){
        PostOrderThr(p->lchild,pre);
        PostOrderThr(p->rchild,pre);
        if(p->lchild==nullptr){
            p->lchild=pre;
            p->ltag=1;
        }
        if(pre!=nullptr&&pre->rchild==nullptr){
            pre->rchild=p;
            pre->rtag=1;
        }
        pre=p;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值