当前位置: 首页 > article >正文

【数据结构】3——线索二叉树

数据结构3——线索二叉树


文章目录


概念

  • 传统的二叉树存储结构中,只能通过遍历的方式找到节点的前驱和后继。为了能快速找到节点在某种遍历序列中的前驱和后继,引入了线索的概念。

  • 若节点的左子树为空,则将左指针指向其前驱节点;若节点的右子树为空,则将右指针指向其后继节点。这些指向前驱和后继的指针就称为线索。


  • 线索二叉树的节点结构:
    通常包括数据域、左指针域、右指针域、左标志位和右标志位。
    标志位用于区分指针域指向的是子树还是线索。例如,左标志位为 0 表示左指针指向左子树,为 1 表示左指针是前驱线索;右标志位同理。

建立线索二叉树

对二叉树进行中序遍历。
在遍历过程中,记录当前节点的前驱节点。

对于当前节点:
如果左子树为空,则将左指针指向前驱节点,并设置左标志位为 1。
如果前驱节点的右子树为空,则将前驱节点的右指针指向当前节点,并设置前驱节点的右标志位为 1。

遍历线索二叉树

中序遍历线索二叉树:
从根节点开始,一直向左找到最左节点,作为遍历的起点。
然后依次访问当前节点,根据当前节点的右标志位判断右指针是否为后继线索,如果是则直接访问后继节点,否则通过常规方式找到右子树中的最左节点继续遍历。

例子

     1
   /   \
  2     3
 / \   / \
4   5 6   7

首先进行中序遍历并构建线索二叉树:
中序遍历序列为:4、2、5、1、6、3、7。

遍历过程中记录前驱节点,

  • 对于节点 4,没有前驱,左子树为空,左指针为空,右指针指向节点 2,右标志位为 0(表示右指针指向右子树)。
  • 对于节点 2,前驱为节点 4,左指针指向节点 4,左标志位为 1(表示左指针是线索),右指针指向节点 5,右标志位为 0。
  • 对于节点 5,前驱为节点 2,左指针指向节点 2,左标志位为 1,右指针指向节点 1,右标志位为 0。
  • 对于节点 1,前驱为节点 5,左指针指向节点 5,左标志位为 1,右指针指向节点 6,右标志位为 0。
  • 对于节点 6,前驱为节点 1,左指针指向节点 1,左标志位为 1,右指针指向节点 3,右标志位为 0。
  • 对于节点 3,前驱为节点 6,左指针指向节点 6,左标志位为 1,右指针指向节点 7,右标志位为 0。
  • 对于节点 7,前驱为节点 3,左指针指向节点 3,左标志位为 1,没有后继,右指针为空。

遍历线索二叉树:

  • 从最左节点 4 开始,访问节点 4。
  • 由于节点 4 的右标志位为 0,通过右指针找到节点 2,访问节点 2。
  • 节点 2 的右标志位为 0,找到节点 5,访问节点 5。
  • 节点 5 的右标志位为 0,找到节点 1,访问节点 1。
  • 节点 1 的右标志位为 0,找到节点 6,访问节点 6。
  • 节点 6 的右标志位为 0,找到节点 3,访问节点 3。
  • 节点 3 的右标志位为 0,找到节点 7,访问节点 7。

http://www.kler.cn/a/299508.html

相关文章:

  • 安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式
  • 【H2O2|全栈】关于Photoshop | PS(4)
  • C++,Qt学习 2024.9.10
  • 【无标题】SAM(Segment Anything Model)
  • 信息过载?企业生存战 一张卡片解决所有痛点
  • iOS——atomic、nonatomic、assign、_unsafe_unretain
  • OpenWRT有三个地方设置DNS,究竟设置哪个地方会更好?
  • 在 Spring MVC 中部署路由为history模式的vue项目
  • 20240910软考架构-------软考141-145答案解析
  • 现在音质最好的开放式耳机是哪一款?盘点市面上比较好的开放式耳机
  • 基于深度学习的自动化产品设计
  • winpe是什么意思_winpe制作详细图文教程
  • 【Unity】AAPT 2-4.2.1-7147631-windows Daemon
  • Linux:epoll 工作模式
  • 【TPAMI 2024】一种用于混合事件-帧摄像机的异步线性滤波器架构
  • Windows一键安装Mysql数据库|非官方复杂安装,解压即可,操作简单
  • Http带消息头两种请求办法
  • 【笔记】数据结构刷题09
  • el-table行编辑
  • 开源 XDR/SIEM 安全平台,附下载链接