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

目录

  • 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没有后序后继

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[pipe-自写管道] 强网拟态2023-water-ker

程序分析 保护当然都开了, 题目给了一次增加, 释放, 修改一字节堆块的能力, 这里释放堆块后没有将其指针置空从而导致了 UAF. 漏洞利用 这里的堆块大小为 512 字节并是 SLAB_ACCOUNT, 所以可以直接利用管道去构造自写管道从而构造任意读写系统, 详细见大佬博客:【CTF.0x08】D…

Spring学习笔记——AOP(4)

Spring学习笔记——AOP(4) 一、学习AOP1.1 AOP的概述1.2 AOP思想实现方案1.3、模拟AOP的基础代码1.4、AOP的相关概念 二、基于xml配置AOP2.1 AOP基础入门2.2、XML方式AOP配置详解2.3、XML方式AOP原理剖析 三、注解式开发AOP3.1 注解式开发AOP入门3.2 AOP…

SpringBoot原理

1配置优先级: SpringBoot项目当中支持的三类配置文件: application.properties application.yml application.yaml配置文件优先级排名(从高到低): 1. properties配置文件 2. yml配置文件 3. yaml配置文件在SpringBoot…

Java常用设计模式(23种)

文章目录 介绍 设计模式的六大原则 一、创建型模式 1、单例模式(Singleton Pattern) 1)饿汉式 2)懒汉式,双检锁 3)静态内部类 4)枚举 2、原型模式(Prototype Pattern&#xff09…

2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项规程

第十六届山东省职业院校技能大赛 中职组“网络安全”赛项规程 一、赛项名称 赛项名称:网络安全 英文名称:Cyber Security 赛项组别:中职组 专业大类:电子与信息大类 二、竞赛目的 网络空间已经成为陆、海、空、天之后的第…

【Servlet】 四

本文主要介绍了cookie和session的区别和联系 . 一.cookie 1.cookie是浏览器在本地持久化存储数据的一种机制 cookie的数据从哪里来 服务器返回给浏览器的 cookie的数据什么样 cookie中是键值对结构的数据,并且这里的键值对都是程序员自定义的 cookie有什么作用 cookie可以在…

通过easyexcel导出数据到excel表格

这篇文章简单介绍一下怎么通过easyexcel做数据的导出,使用之前easyui构建的歌曲列表crud应用,添加一个导出按钮,点击的时候直接连接后端接口地址,在后端的接口完成数据的导出功能。 前端页面完整代码 let editingId; let request…

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

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

Ubuntu虚拟机设置静态IP

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

第25章_索引优化与查询优化

文章目录 1. 数据准备2.索引失效案例2.1全值匹配2.2最佳左前缀法则2.3主键插入顺序2.4 计算、函数导致索引失效2.5 类型转换导致索引失效2.6 范围条件右边的列索引失效2.7 不等于(! 或者<>)索引失效2.8 is null可以使用索引&#xff0c;is not null无法使用索引2.9 like以…

多孔对跨孔电磁波CT联合反演

多孔对跨孔电磁波CT联合反演 前言 针对单一孔对跨孔电磁波CT反演数据拼接剖面不连续&#xff0c;相邻钻孔间吸收系数差异大的问题&#xff0c;采用多孔对跨孔电磁波CT联合反演。 1、多孔对数据拼接 将所有单一剖面连接为多孔剖面&#xff0c;以‘东大北大’的原则编号。 …

Linux基础开发工具之分布式版本控制系统Git

文章目录 1.Git是什么&#xff1f;1.1介绍1.2影响世界的大牛1.3English Words 2.Git常用指令2.1Git三板斧2.2解决冲突2.3黑名单文件2.4删除本地远端 1.Git是什么&#xff1f; 1.1介绍 史上最浅显易懂的Git教程&#xff01; git是一个软件 gitee/github是一个网站但是他们的主…

微信小程序入门及开发准备,申请测试号以及小程序开发的两种方式,目录结构说明

目录 1. 介绍 1.1 优点 1.2 开发方式 2. 开发准备 2.1 申请 2.2 申请测试号 2.2 小程序开发的两种方式 2.3 开发工具 3. 开发一个demo 3.1 创建项目 3.2 配置 3.3 常用框架 3.3 目录结构说明 3.4 新建组件 1. 介绍 1.1 优点 是一种不需要下载安装即可使用的应用…

Linux-Docker的基础命令和部署code-server

1.安装docker 1.安装需要的安装包 yum install -y yum-utils2.设置镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.安装docker yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin do…

PyQt制作【小红书图片抓取】神器

文章目录 &#x1f4e2;闲言碎语&#x1f43e;窗口设计&#x1f43e;功能设计&#x1f4da;资源领取 &#x1f4e2;闲言碎语 最近写一个系统&#xff0c;被一个Bug折腾了两天&#xff0c;至今还未解决。由于解决Bug弄得我有点心力憔悴&#xff0c;于是想着写其他小项目玩玩&am…

Python 使用OS模块调用 cmd

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

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

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

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

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

[ARM入门]ARM模式及其切换、异常

ARM技术特征 ARM处理器有如下特点 体积小、功耗低、成本低、性能高支持Thumb&#xff08;16位&#xff09;/ARM&#xff08;32位&#xff09;双指令集&#xff0c;能很好地兼容8位/16位器件大量使用寄存器&#xff0c;指令执行速度更快大多数数据操作都在寄存器中完成寻址方式…

【Java】Java8 Function 和 Consumer 接口的使用场景

文章目录 前言1. Function 示例2. Function 介绍3. Consumer 示例4. Consumer 介绍5. Function 和 Consumer 接口的使用场景后记 前言 在 《精通Java8》一书中有讲过 Java8的函数式接口可以简化设计模式的实施&#xff0c;这里记录一下Function 和 Consumer 的使用场景。 1. …