线索化二叉树

#include <stdio.h>  

#include <stdlib.h>  

  

// 定义线索化二叉树的节点结构  

typedef struct ThreadNode {  

    int data;  

    struct ThreadNode *lchild, *rchild;  

    int ltag, rtag; // ltag=0表示lchild指向左子树,ltag=1表示lchild指向前驱节点  

                     // rtag=0表示rchild指向右子树,rtag=1表示rchild指向后继节点  

} ThreadNode, *ThreadTree;  

  

// 全局变量,指向当前访问节点的前驱  

ThreadNode *pre = NULL;  

  

// 中序遍历并进行线索化  

void InThread(ThreadTree T) {  

    if (T != NULL) {  

        InThread(T->lchild); // 中序遍历左子树  

        visit(T); // 访问根节点并线索化  

        InThread(T->rchild); // 中序遍历右子树  

    }  

}  

  

// 访问节点并进行线索化  

void visit(ThreadNode *q) {  

    if (q->lchild == NULL) { // 左子树为空,建立前驱线索  

        q->lchild = pre;  

        q->ltag = 1;  

    }  

    if (pre != NULL && pre->rchild == NULL) { // 前驱节点的右子树为空,建立后继线索  

        pre->rchild = q;  

        pre->rtag = 1;  

    }  

    pre = q; // 更新前驱节点  

}  

  

// 其他函数,如创建二叉树、销毁二叉树、线索化后的遍历等,可以在这里继续添加  

  

int main() {  

    // 创建二叉树,调用 InThread 进行线索化,然后进行线索化后的遍历等操作  

    // ...  

    return 0;  

}

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bl‥ck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值