线索二叉树(存储结构,线索化,寻找前驱/后继)

news2024/11/21 2:30:29

目录

  • 1.线索二叉树
    • 1.中序线索二叉树
    • 2.后序线索二叉树
    • 3.先序线索二叉树
  • 2.线索二叉树的存储结构
  • 3.二叉树的线索化
    • 1.中序线索化
    • 2.先序线索化
    • 3.后序线索化
  • 4.寻找前驱/后继
    • 1.中序线索二叉树找后继
    • 2.中序线索二叉树找中序前驱
    • 3.先序线索二叉树找先序后继
    • 4.先序线索二叉树找先序前驱
    • 5.后序线索二叉树找后序前驱
    • 6.后序线索二叉树找后序后继

1.线索二叉树

为了解决普通二叉树遍历,寻找前驱或者后继不方便的问题,引入了线索二叉树。
n个结点的二叉树,有n+1个空链域,可用来记录前驱、后继的信息。
指向前驱、后继的指针称为‘线索”

1.中序线索二叉树

中序线索二叉树――线索指向中序前驱、中序后继.
左孩子指针指向前驱线索
右孩子指针指向后继线索

在这里插入图片描述

2.后序线索二叉树

后序线索二叉树――线索指向后序前驱、后序后继。

在这里插入图片描述

3.先序线索二叉树

先序线索二叉树――线索指向先序前驱、先序后继.

在这里插入图片描述

2.线索二叉树的存储结构

在这里插入图片描述

tag == 0,表示指针指向孩子
tag == 1,表示指针是“线索

3.二叉树的线索化

1.中序线索化

在这里插入图片描述

2.先序线索化

会出现转圈问题。当ltag==0时,才能对左子树先序线索化.

在这里插入图片描述

3.后序线索化

在这里插入图片描述

4.寻找前驱/后继

1.中序线索二叉树找后继

若右指针没有被线索化,找右子树中最左下结点

在这里插入图片描述

2.中序线索二叉树找中序前驱

若左指针没有被线索化,找左子树中最右下结点

在这里插入图片描述

3.先序线索二叉树找先序后继

若右指针没有被线索化:
①若结点p有左孩子,则先序后继为左孩子;
②若结点p没有左孩子,则先序后继为右孩子。

在这里插入图片描述

4.先序线索二叉树找先序前驱

若左指针没有被线索化,先序遍历中,左右子树中的结点只可能是根的后继,不可能是前驱。

改用三叉链表可以找到父节点的情况:
如果能找到p的父节点,且p是左孩子,p的父节点即为其前驱。
如果能找到p 的父节点,且p是右孩子,其左兄弟为空,p的父节点即为其前驱。
如果能找到p的父节点,且p是右孩子,其左兄弟非空,p的前驱为左兄弟子树中最后一个被先序遍历的结点。
如果p是根节点、则p没有先序前驱

5.后序线索二叉树找后序前驱

若左指针没有线索化的情况:
①若p有右孩子,则后序前驱为右孩子。
②若p没有右孩子,则后序前驱为左孩子。

6.后序线索二叉树找后序后继

若右指针没有被线索化:后序遍历中,左右子树中的结点只可能是根的前驱,不可能是后继。

改用三叉链表可以找到父结点:
如果能找到p的父节点,且p是右孩子,p的父节点即为其后继。
如果能找到p 的父节点,且p是左孩子,其右兄弟为空,p的父节点即为其后继。
如果能找到p的父节点,且p是左孩子,其右兄弟非空,p的后继为右兄弟子树中第一个被后序遍历的结点。
如果p是根节点,则p没有后序后继

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1199276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会员题-力扣408-有效单词缩写

有效单词缩写 字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 “substitution” 可以缩写为(不止这几种方法): “s10n” (“s ubstitutio n”) “sub4…

配置交换机将Log发送到日志服务器

文章目录 一、配置说明二、配置步骤推荐阅读 一、配置说明 配置将实现如下: 配置交换机将Log发送到日志服务器。 将信息等级高于等于 debug 的日志信息将会发送到日志服务器上。 允许输出日志信息的模块为default所有应用模块日志信息。 SW1为我们日志源交换机…

Clickhouse学习笔记(12)—— 物化视图

ClickHouse 的物化视图是一种查询结果的持久化,与普通视图对比,其不仅保存了查询的逻辑,还保存了查询结果; 物化视图与普通视图的区别 普通视图不保存数据,保存的仅仅是查询语句,查询的时候还是从原表读取…

画面精美传奇手游幽冥传奇【幽冥灭龙传奇】win服务端+双端+GM授权后台+详细教程

搭建资源下载地址:画面精美传奇手游幽冥传奇幽冥灭龙传奇win服务端双端GM授权后台详细教程-海盗空间

JuCheap开发的微信小程序商城(NetCore商城)

一、目的 最近工作需要,在学习微信小程序的开发,用周末空闲时间开发了一个微信小程序商城。 二、功能 2.1 管理后台 管理后台是基于JuCheap开发的,使用Net6Vue3ElementPlus开发,具体功能包含如下: 2.1.1 店铺模块…

lc228. 汇总区间

暴力解法:遍历数组,判断数组是否连续递增。将连续递增的数据的首尾的数据分别存储在map集合的key和value之中,输出时判断首尾值是否相同采用两种方式输出 复杂度分析 时间复杂度:O(n),其中 n 为数组的长度。空间复杂…

环形链表解析(c语言)c语言版本!自我解析(看了必会)

目录 1.判断一个表是否是环形链表! 代码如下 解析如下 2.快指针的步数和慢指针的步数有什么影响(无图解析) 3.怎么找到环形链表的入环点 代码如下 解析如下 1.判断一个表是否是环形链表! 代码如下 bool hasCycle(struct L…

ZDH-智能营销-执行流程解析

目录 项目源码 预览地址 安装包下载地址 通过2个方向解读ZDH流程图 图执行方向 数据流转方向 项目源码 zdh_web: GitHub - zhaoyachao/zdh_web: 大数据采集,抽取平台 zdh_magic_mirror: https://github.com/zhaoyachao/zdh_magic_mirror 预览地址 后台管理-登陆 用户…

Matplotlib绘图一网打尽【持续更新ing】

2 绘制扇形图 绘制一个展示男女乘客比例的扇形图 得出男女的具体数字 sex_per df["Sex"].value_counts() sex_per # 把画图的包导入进来 import matplotlib.pyplot as plt# 这种绘图方式主要用于有多个子图以及复杂的图形布局的时候。fig,ax plt.subplots()# pl…

numpy 基础使用

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变…

Python 使用OS模块调用 cmd

嗨喽,大家好呀~这里是爱看美女的茜茜呐 在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system() os.system(cmd) 是在执行command命令时需要打开一个终端,并且无法保存command命令的执行结果。 os.popen(cmd,mode) 打开一个与comma…

汽车ECU的虚拟化技术初探(一)

目录 1.为什么要提汽车ECU的虚拟化? 2.虚拟化技术分类 2.1 硬件虚拟化 2.2 操作系统虚拟化 问题引入: Hypervisor是如何来管理和隔离硬件资源,保证各个不同功能的应用程序的资源使用安全和资源调度?没有MMU就做不了虚拟化&am…

【集简云调度影刀RPA】

集简云调度影刀 集简云的http请求,都是用webhook。 1、获取token的时候,在url中必须这么填,在数据或者headers里面填写keyID和密码不管用。 2.调起应用的时候,需要选择webhook中的post,自定义的请求,才能…

Ubuntu虚拟机设置静态IP

目录 1 确定网络信息2 配置网络文件3 更新配置4 验证 网上很多方案都是 sudo vi /etc/network/interfaces 但是在Ubuntu20.04中我的目录i已经没有这个文件夹了,好像就算自己新建通过这种方式也是不能达到静态ip的目的。整理了下面的这种方式,实测最终有效…

2.OpenResty系列之Lua入门

1. Lua简介 Lua是一种轻量级的、高效的脚本编程语言,最初由巴西里约热内卢天主教大学的一个研究小组开发和发布。Lua的设计目标是提供一个简单、可嵌入、可扩展的脚本语言,官方实现完全采用 ANSI C 编写,能以 C 程序库的形式嵌入到其他应用程…

基于JavaWeb的网上体育商城的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题,今天给大家介绍…

在以TAB为首地址的字存储区中存放有N个无符号数,试统计低3位全为1的数的个数(个数设为≤9),并显示。

;默认认采用ML6.11汇编程序 DATAS SEGMENT;此处输入数据段代码TAB DW -7,7,15,20,21N($-TAB)/2;G DW 0 DATAS ENDS STACKS SEGMENT;此处处输入堆栈段代码; DB 200 DUP(0) STACKS ENDS CODES SEGMENTASSUME CS:CODES,DS: DATAS, SS:STACKS START:MOV AX, DATASMOV DS,AX;此处输入…

JavaScript从入门到精通系列第三十四篇:基于JavaScript实现邮件正则

文章目录 一:电子邮件正则 1:电子邮件规则 2:编写代码校验 大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分&…

postman设置动态token, 每次登录更新token

postman设置动态token, 每次登录更新token 文章目录 postman设置动态token, 每次登录更新token问题1. 设置全局变量2. 新建登录接口3. 设置脚本4. 切换环境5. 配置动态token 问题 token过期时间一般比较短, 每次使用postman调用接口都token非常麻烦 实现token过期后, 调用一次…

链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)

目录 前言 1.反转一个单链表。 2. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 3.链表的回文结构。 4.链表带环问题(*****) 4.1是否带环 4.2 入环的节点 5.随机链表的复制(链表的深拷贝) 前言…