用C语言实现中序线索树

 中序遍历就一个核心思路:对于节点来说,如果没有左孩子,左指针就存入前驱节点,如果没有右孩子,右指针就存入后继节点

初始化

节点结构:数据域+指针域(左指针,右指针)+标志(左,右)

表头结构:头指针+计数器

创建节点结构:将节点中所有的属性都初始化,注意接口设计的时候要传入元素值,在创建节点结构的时候,

创建头结构:

1.为头申请空间

2.memset初始化

3.判断是否已经有表头

元素的插入

中序线索化过程

考虑到left会指向前驱节点,那么定义一个pre指针存储进入这个节点之前的状态

使用中序遍历,当回到访问节点时,判断这个节点是否有左孩子,如果没有,当前阶段的left就可以保存pre的值

如果代码不理解可以看看下面的视频:

【线索二叉树[第二部分:代码讲解]-哔哩哔哩】 https://b23.tv/g1JBwvm

1.创建前驱节点,让他为空

2.一个节点进去之后,先处理它的左孩子

3.如果左孩子为空,让左边的标志为1,并且左指针指向前驱节点pre

4.为什么这里判断的是pre呢,因为右节点指向的应该是后继节点,那当前的节点node就是pre的后继节点

5.让pre到当前节点

6.处理完左边后再处理右边

中序线索化后,遍历二叉树

1.先找到第一个元素,有了头才能往下找

2.通过第一个元素访问后继节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值