二叉树学习

树是n个结点的有限集合,当n=0时为空树,在任意一颗非空的树中,有且只有一个特定的称为根的结点,当n>1时,其余结点又可以分为m个不相交的有限集,其中每一个集合又是一棵树,并且称为根的子树

树的结点包含一个数据元素以及若干指向其子树的分支,结点拥有的子树称为结点的度,度为0的结点称为叶结点或者终端结点,度不为0的结点称为非终端结点或者分支结点,除根结点之外,分支结点称为内部结点,树的度是树内部各个结点的度的最大值

结点的子树的根称为该结点的孩子,该结点称为孩子的双亲,同一个双亲的孩子之间互相称为兄弟

树的深度:树中结点的最大层次

树的存储结构

  1. 顺序存储结构
  2. 链式存储结构

二叉树

对于在某个阶段都是两种结果的情形,比如开关,01,上下,对错,真假等,都适合使用树状结构来进行建模,这种树被称为二叉树

》》二叉树特点

  1. 每个节点必须有两颗子树
  2. 左子树和右子树是有顺序的,次序不能颠倒
  3. 要能够区分左子树和右子树

二叉树的基本形态

  1. 空二叉树
  2. 只有一个根结点
  3. 根结点只有左子树
  4. 根结点只有右子树
  5. 根结点既有左子树也有右子树

特殊二叉树

1.斜树:所有的结点都只有左子树的二叉树称为左斜树,所有结点都只有右子树的二叉树称为右斜树

2.满二叉树:在一颗二叉树中,所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层次上,这样的二叉树称为满二叉树

3.完全二叉树:对于一颗具有n个结点的二叉树按照层次编号,如果编号为i的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,那么这颗二叉树称为完全二叉树

此时左边的为完全二叉树,而右边的不是,因为节点的编号不是连续的,C缺少了左子树

完全二叉树特点:

  1. 叶子结点只能出现在最下面两层
  2. 最下面的叶子一定集中在左部的连续位置
  3. 倒数第二层,如果有叶子结点,一定都在右边连续的位置
  4. 如果结点的度为1,那么该结点只有左子树
  5. 同样的二叉树,完全二叉树的深度最小

二叉树的性质

  1. 在二叉树的第i层至多有2^(i-1)个结点
  2. 深度为k的二叉树至多有2^(k-1)个结点
  3. 对于任何一颗二叉树,如果其终端节点数为n,度为2的节点数为m,则n=m+1

》》二叉树的顺序存储结构

虽然顺序结构对于树这种一对多的关系结构实现起来比较困难,但是二叉树具有特殊性,二叉树的结点是按照特定的顺序进行编号的,因此可以使用顺序存储结构也可以实现二叉树,但是考虑的特殊情况(每个结点只有右子树),就会造成内存空间的极大浪费,因此顺序存储结构一般只适用于完全二叉树

二叉树的链式存储结构

二叉树的节点

为二叉树的每个结点都设置两个指针域和一个数据域,分别用来指向其子树和存储数据

其中data就为二叉树节点的数据域,存储节点的数据

ltree和rtree为指针域,分别指向其左子树和右子树

二叉树的遍历方法

1.前序遍历

如果二叉树为空,则返回空,否则返回根结点,否则前序遍历左子树,再前序遍历右子树

只要传入的二叉树不为空,则打印出当前节点的值,再递归调用函数遍历其左子树,最后递归调用函数遍历其又子树

2.中序遍历

如果二叉树为空,则返回空,否则中序遍历左子树,访问根结点,再中序遍历右子树

3.后序遍历

如果二叉树为空,则返回空,否则后序遍历左子树,后序遍历右子树,访问根结点

4.层次遍历

如果二叉树为空,则返回空,否则从根结点开始,从上往下逐层遍历,在同一层中,按照从左到右的顺序进行访问

这是通过队列来实现的

二叉树遍历性质

  1. 已知一个中序遍历和前序遍历可以确定唯一的二叉树
  2. 已知一个中序遍历和后序遍历可以确定唯一的二叉树

注:如果已知前序和后序遍历是不能确定一颗二叉树的

二叉树的建立

使用补空法建立二叉树,如果结点为#,则该节点为空

建立二叉树算法:

  1. 首先捕获一个值,判断是否为#,如果为#,二叉树为空
  2. 否则循环捕获节点信息,为结点分配内存,分配失败则退出
  3. 递归创造左右结点

二叉树的叶子数,深度,以及节点数

叶子数:只要该节点没有左右子树,那么该节点就为二叉树叶子

深度:找出左右子树的最大深度,再加上根节点,就是该叶子数的深度

节点数:求出根节点左子树的节点数和右子树的节点数,再加上根节点就是该二叉树的节点数

线索二叉树

指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树,对二叉树以某种次序遍历使得其变为线索二叉树的过程称为线索化

线索化的实质就是将二叉树的空指针改为指向前驱或者后继的线索,由于前驱和后继的信息只能在遍历的过程中得到,所以线索化的过程就是修改空指针的过程

对于n个结点的二叉树,一共有2n个指针域,而真正使用的指针域只有n-1个,有n+1个指针域没有被利用,因此可以将空指针域的内容填充,让其指向其前驱点或后继

线索二叉树实现

需要两个变量来确定,二叉树的指针域是指向为其子树还是指向其前驱点

设为ltag,rtag,这两个变量为bool类型

当ltag为0时指向该结点的左子树,当ltag为1时指向该结点的前驱

当rtag为0时指向该结点的右子树,当rtag为1时指向该结点的后继

意义

如果所使用的二叉树需要经常进行遍历或者查找某些结点时需要某种遍历序列中的前驱和后继,那么采用线索二叉树

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

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

相关文章

深度学习方法;乳腺癌分类

乳腺癌的类型很多,但大多数常见的是浸润性导管癌、导管原位癌和浸润性小叶癌。浸润性导管癌(IDC)是最常见的乳腺癌类型。这些都是恶性肿瘤的亚型。大约80%的乳腺癌是浸润性导管癌(IDC),它起源于乳腺的乳管。 浸润性是指癌症已经“侵袭”或扩散到周围的乳…

c# wpf template itemtemplate+dataGrid

1.概要 2.代码 <Window x:Class"WpfApp2.Window8"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

《UE5_C++多人TPS完整教程》学习笔记30 ——《P31 摄像机和弹簧臂(Camera And Spring Arm)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P31 摄像机和弹簧臂&#xff08;Camera And Spring Arm&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

梯度下降算法(Gradient Descent)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法引言 梯度下降算法&#xff0c;这个在机器学习中非常常见的算法&#xff0c;可以用下山的例子来形象地解释。想象一下&#xff0c;你在一座…

Type-c转USBA3.0芯片 USBA3.0转Type-c芯片(USB3.1GEN2 多路切换Switch芯片) VL162

VL162具有CC功能的USB Type-C数据开关USB 3.1 Gen2 (10Gbps) VL162 带CC功能的USB Type-C数据开关 支持最高10Gbps 2差分通道&#xff0c;2:1 MUX/DeMUX 兼容10Gbps USB3.1 Gen2 低功耗&#xff0c;6mW在设备模式下有效 高直流共模电压&#xff0c;支持2.0V 28针QFN 3.5 x 4.5m…

[RK3128_LINUX5.1] 关于 RetroArch 使用

问题描述 查看文档 docs\cn\Linux\ApplicationNote\Rockchip_Use_Guide_Linux_RetroArch_CN.pdf&#xff0c;描述为实验 make menuconfig 后勾选选项 Libretro cores and retroarch -> retroarch 但是SDK中并没有这个选项 解决方案&#xff1a; 目前发布的buildroot SDK…

MySQL -- 08_最流行的查询需求分析(日期相关、生日、年份距离等~)

目录 最流行的查询需求分析08演示数据准备的SQL需求演示日期相关的查询函数46、查询各学生的年龄使用 timestampdiff() 函数更精准 47、查询本周过生日的学生简单写法&#xff1a;weekofyear针对不规范日期格式的判断写法&#xff1a; 48、查询下周过生日的学生49、查询本月过生…

STC89C51学习笔记(四)

STC89C51学习笔记&#xff08;四&#xff09; 综述&#xff1a;本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选&#xff1a;对74HC138芯片的输入端的配置&#xff08;P22、P23、P24&#xff09;&#xff0c;来选择实现位选&…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--创建新主题

前言 你可以在wordpress里面下载使用人家打包好的主题&#xff0c;但可能不是很好用&#xff0c;接下来就自己做一个自己的主题。你需要先找到xampp文件夹–htdocs–wordpress(我给更名为wplocal)–wp-content–themes 进入该文件夹之后你可以看到你之前下载导入的所有主题文件…

深度学习十大算法之深度Q网络(DQN)

一、简介 深度Q网络&#xff08;DQN&#xff09;是一种结合了深度学习和强化学习的算法&#xff0c;它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年&#xff0c;由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN的…

Redis -- 缓存穿透问题解决思路

缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&#xff1a; 额外…

Web大并发集群部署之集群介绍

一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…

如何用putty通过ssh连接ubuntu

1. 下载和安装PuTTY 访问PuTTY官网下载PuTTY的最新版本。 2. 打开PuTTY 解压下载的文件后&#xff0c;找到PuTTY文件并双击打开。 3. 配置SSH连接 在ubuntu下安装ssh服务在安装ssh时&#xff0c;我一直遇到一个问题&#xff0c;原因是我的虚拟机连不上网&#xff0c;反复实…

Spark-Scala语言实战(13)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的keys和values,reduceByKey,groupByKey三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢…

海康摄像头插件嵌入iframe时视频播放插件位置问题

参考&#xff1a;https://juejin.cn/post/6857670423971758094 原因&#xff1a;没有按照iframe相对位置计算视频插件位置。 解决&#xff1a; $(window).on(resize, resize);function resize(){// 解决iframe中嵌入海康插件初始化问题:// 1. 获取iframe相比于窗口的偏移量;c…

第二节课《轻松玩转书生·浦语大模型趣味 Demo》

比较匆忙&#xff0c;假期前仿照第一期课程的内容好像被清空了&#xff0c;重新搭建一次。 https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 按照那老师写好的&#xff0c;一步步复制就好了 浦语灵笔2的大概率是会超出显存&#xff0c;先不测试了…

水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型

水泥5G智能制造工厂数字孪生可视化平台&#xff0c;推进水泥行业数字化转型。水泥5G智能制造工厂数字孪生可视化平台&#xff0c;是水泥行业数字化转型的关键推手。数字孪生平台运用先进的信息技术和数字化手段&#xff0c;实现水泥生产过程的数字化模拟、可视化监控和智能化管…

泰坦尼克号幸存者数据分析

泰坦尼克号幸存者数据分析 1、泰坦尼克号数据集2、数据集加载与概览3、泰坦尼克号幸存者数据分析4、哪些人可能成为幸存者&#xff1f; 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一&#xff0c;造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…

LoRa自组网络设计 6

1 深入了解LoRaWan 1.1 LoRaWan概述 LoRaWAN采用星型无线拓扑 End Nodes 节点 Gateway 网关 Network Server 网络服务器 Application Server 应用服务器 LoRa联盟是2015年3月Semtech牵头成立的一个开放的、非盈利的组织&#xff0c;发起成员还有法国Actility&#xff0c;中国…