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

数据结构 之 线索二叉树(七)

提示:本篇主要讲解线索二叉树的基本概念和二叉树、树,森林之间的转换

文章目录

  • 线索二叉树基本概念
  • 线索二叉树类型定义
  • 线索二叉树的基本概念
  • 中根线索二叉树
  • 树向二叉树的转换
  • 森林转换二叉树
  • 树和森林的遍历(知道即可)


线索二叉树基本概念

`提示:【问题】有n个结点的二叉链表中,有( )个指针域被闲置。

所以可以利用这些空闲的指针域:
当某结点无左孩子时,令其左指针指向它的前趋结点;
当该结点无右孩子时,令其右指针指向它的后继结点。

线索:指向前驱或后继结点的指针称为线索。

为了严格区分结点的孩子指针域究竟指向孩子结点还是指向前趋或后继结点, 需在原结点结构中增加两个标志域。 因此二叉链表的结点结构可重新定义为:
在这里插入图片描述

线索二叉树类型定义

struct thrnode {  
		int  data;
  		struct  thrnode  *lchild , *rchild;
     int Ltag,Rtag; /* 左、右标志域 */
     };

对二叉树以某种次序进行遍历并且加上线索的过程称为线索化。经过线索化后生成的二叉链表称为线索二叉树

根据遍历的顺序,线索二叉树可以分为

  1. 前序线索二叉树
  2. 中序线索二叉树
  3. 后序线索二叉树

线索二叉树的基本概念

在这里插入图片描述

中根线索二叉树

在这里插入图片描述
中根遍历序列:DBGEACF

树向二叉树的转换

方法:树中结点的孩子放在二叉树的左子树中,树中结点的兄弟放在二叉树的右子树中,简而言之就是,左孩子右兄弟。

转换步骤:
(1)在兄弟节点之间连一条线;
(2)每个结点仅保留其与最左孩子之间的连线,其余连线删除;
(3)以根为轴心将整棵树顺时针旋转45度。

树向二叉树的转换如图所示:
在这里插入图片描述

那么问题来了,思考:如何将一棵二叉树还原成树?

还原步骤如下:
(1)将二叉树中的根结点与其右孩子间的连线,及沿右分支搜索到的所有右孩子间的连线全部抹掉,使之变成孤立的二叉树;
(2)根据左孩子右兄弟法则,进行连接,结果下图所示。
(3) 逆时针旋转45°。

森林转换二叉树

可以看出这和树向二叉树的转换相同,只不过最后把多个二叉树合并成了一个而已,遵循的规则还是左孩子右兄弟原则.

树和森林的遍历(知道即可)

结论:
树的先根遍历序列与其转换后对应的二叉树的先根遍历序列序列相同。
树的后根遍历序列与其转换后对应的二叉树的中根遍历序列相同。


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

相关文章:

  • 【Linux】从零开始使用多路转接IO --- epoll
  • 2024年11月4日Github流行趋势
  • Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
  • 模型 海勒姆法则(用户依赖你未承诺的API功能)
  • 深入理解 Spring Boot 中的 @PathVariable 注解
  • 【C++】继承的理解
  • 如何对数据库的表字段加密解密处理?
  • Maven resrouce下filtering作用说明
  • jupyter notebook的调试
  • 什么情况下,不推荐建立索引?
  • PDF Reader Pro for mac激活版 PDF编辑阅读器
  • gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
  • 电脑开机显示无信号然后黑屏怎么办?
  • 认识单双链表
  • conda下安装volitility3
  • C++优选算法六 模拟
  • 5G工业网关的主要功能有哪些?天拓四方
  • 单体架构的 IM 系统设计
  • Hadoop简介及单点伪分布式安装
  • 使python输出带上颜色
  • 数据结构与算法教学视频+pdf+刷题手册(python+c+java+javascript)个人分享~
  • FlinkCDC-MYSQL批量写入
  • OceanBase V4.3.3,首个面向实时分析场景的GA版本发布
  • 【漏洞复现】某最新版快递微信小程序系统存在前台任意文件读取漏洞
  • HTML 标签属性——<a>、<img>、<form>、<input>、<table> 标签属性详解
  • 基于Python爬虫与文本挖掘的网络舆情监控系统【附源码】