当前位置: 首页 > 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

相关文章:

  • 四种电子杂志制作软件
  • 图像处理-Ch6-彩色图像处理
  • ASP.NET Core Web API 控制器
  • 【CryptoJS库AES加密】
  • 使用GPT进行SCI论文润色常用语句
  • 解决 Docker 中 DataLoader 多进程错误:共享内存不足
  • 如何对数据库的表字段加密解密处理?
  • 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爬虫与文本挖掘的网络舆情监控系统【附源码】