5.5.1二叉排序树


加油加油哦ε٩(๑⌓̈๑)۶з

 

那么今天我们先来回忆一下什么是22排序数22排序数,它的简称叫做BSt battery such as tree,所以它也称为2叉查找数,那么他的第一是22排的树,可以为空当他不为空时我们对他有如下的要求,第1个要求是若泽自述飞空时再择自树上所有结点关键字的值均小于它的根节点,而柚子树非公时,所有柚子树上结点关键字的值均大于他跟几点的关键4,并且左子树和柚子树本身也是一个2叉排序树,我们发现二束定义是采用一种递归的形式,22还学术当中的每一个子数都是2叉排序树,而且在定义当中我们需要注意的一点是,这里也是小鱼和大鱼,而没有等于他是什么意思呢?就是说左子树上所有结点的值均小于根节点相同。其中是没有相同式的节点的,也就是说这里我们默认了,在依靠二差排序当中是没有相同值的节点的,每一个节点的值都是不同的好,我们来看一颗二叉。来看一颗二叉排序数的例子,这是一颗二叉排序数,我们来观察它是不是符合二叉排数的定义啊,无论以哪一个节点为根节点,它的镯子出的值均小于这个根据点的值,所有u字数的值也均大于这个节点的值,都是一颗二叉排序数好,接下来我们来对它进行一次中旬病例,中旬病例是先访问左子数,再访问更节点的时候访问右子数,那么我们得到了它的程序,便于序列,我们发现这个排序树的中序遍历序列式递增的形式,那么所有的20排序树都有这样的特点吗?当然是是的,为什么呢?因为我们发现周迅便给学员发文字,就是左子数根节点右子数,而22排的数刚好有这样的特点,所有的数,所有节点的值均小于更节点小云结果会是一种。那么所以我们中需变电的结果会是一种递增的形式,那么中续便利的次序刚好符合22海域数这样递增的形式,所以22排余数的中序变异序列已经是一个递增的有序序列,这是22排余数的一个非常重要的特点,接下来我们来介绍几个与王2叉排序数的重要操作,我们知道2差排序数又称为二叉叉,少数其实对于他来讲,我们常用的操作并不是排序而是查找,所以今天讲的第1个操作是查找,那么如何进行查找呢?我们来看一下他的过程,若要上述非空识查找根结点若相等则表示查找成功走到小鱼哥借点知识包含的经验值查找柚子树因为所有的。这跟几点知识我们要查找柚子树,因为所有大于根节点值的节点就在幼仔出生好,我们知道如果我们一直没有查找到对应值的节点时,我们会查找到叶节点,也就是说刚查找到业界点仍没查找到相应的值时,则表示查要失败,表示在这个22排的数当中没有对应知道的节点好,我们来看一个22函数的例子,那么现在我们就来查找两个节点来练习一下这个过程,那么首先我们来查找一个有的节点,比如说关键字值为5的节点,我们从根基点出发5:8要小,所以我们要查找8的左子数,那么8的所有数的分解点是45:4要大,所以要查找4道u字数,u字数的更节点则是,所以我们查找到了对应指的节点比如说,接下来我们查找一个没有的节点,比如说值为6的节点,我们依旧从根据点出发,因为比8要小,所以我们依旧查找八大所指数,6:4比较大。那几点出发又比8要小,所以我们伊秀查找8的数字数6:4比较大,我们要查找四的柚子树,又比5要大查找5节点的柚子树,6:7要小茶找7结点的左子树,我们发现7的组词数为空,所以没有10为6的节点表示查找失败,还有这就是我们练习了两个查找的过程,成功和失败的,接下来我们来看它是如何用语言来编写的。大家可能会发现该算法的描述过程是一个非常符合递归的过程,其实我们用递归递减的算法会非常的简单,那么大家可以自己去实现一下,接下来我们学习的是一个非tv形式项目计划,大家还记得吗?我们之前通过这样讲递归转换成cd规,那么所有的递归转非递归都需要这样的支持吗?当然是不是的,这就是一个没有通过站来向递归转换成非递归的算法,它的名字叫做BSt不是的,这就是一个没有通过站来向递归转换成非递归的算法,它的名字叫做BSt设置方式类型是一个22排余数节点指针类型的变量,也就是说返回到我们查找节点的地址,传入的参数有三个,第1个是查找到2查排序数,第2个是查找的关键字,第3个是什么呢?其实第3个参数在该算法里是没有得到应用的,它是保存了我们查找到的节点的双星节点,是一个指针引用类型变量,大家可能对该类型的变量会非常陌生,其实该类型的变样它是非常少见的,我们几乎不使用,我们在考研当中几乎是不会碰到的,他是什么意思呢?其实它与普通饮用是一样的,他是我们传送参数指针的另外一个名字,它的作用是一样的,我们在肝函数体内对开始人进行修改时,不仅仅会对型材进行修改,也会对我们传入的这个变量指针进行速干。宠物的这个变量指针进行修改好,接下来我们来看函数的函数体内部是如何进行实现的,首先当然是把这个双击节点指为空,因为跟节点是没有双击节点的,接下来是一个脉络循环语句循环的条件是什么呢?第1个条件是t不等于空,也就是说我们当前查找的这个节点,它并不是一个空间点,如果是一个空气点就说明我们查找完毕了,接下来第2个条件是当k不等于提到a的时候,也就是说我们查找的关键字值与该节点的关键字值不等式,我们继续查找,第1个语句是p复制为t,也就是说将双击节点复制为带节点,然后则是一个判断语句,判断的是什么呢?判断的就是我们算法当中的比较部分柚子树。啊,比较部分也就是说判断我们查到我的这个值是比更新点的值是小啊还是大若小则查找左子数,如果大了就查找u字数,现在我们循环a过程就可以查找整个二查排序数了,最后会为他的t,如果没有插手的话,我们会认为突然now好处就是22盘余数查找算法好,接下来我们举个例子走下盘算法的过程,比如说我们现在要查找完全的值为2的几率,首先我们将它的根节点传入到参数当中,然后将它的双亲节点指为now,接着我们来判断该节点不为now,且它的关键词指8不等于2,所以我们指向循环首先修改双击节点值,接下来我们判断二是要比8小的,所以我们接下来将t负值为它的组合的节点就是插入它的左子数之后又一次是否自己。他的左孩子经典也就是查找他的左子数之后又一次的循环,依旧判断4节点是否为空,4经点是否等于2,它不为空也不等于2,所以我们接下来进入循环体,依旧修改双性节点为当前节点,然后你就判断我们接着继续访问4道左子数,然后4道左涵的节点是2,所以我们接下来循环判断的时候,2是等于k的,也就是循环结束,接下来只要反为二级店的地址就可以了,好,这就是整个算法的执行过程,那么它的时间复杂度是多少呢?我们知道这个算法的实验过程是从根节点开始逐层向下的进行查找,所以最后没有查找到业绩点,从根结点到业绩点,它的时间复杂度为wh设备的h是代表了ak2叉排序数的插入操作。接下来我们学习2叉排序树的第2个操作,也就是2叉排序树的插入操作如何进行插入到,因为我们知道我们对呀掘树是有特殊要求的,所以在我们插入节点后,还要保持2叉排序树的性质,所以该算法是这样实现的。如果22开始数为空时则直接插入改节点,作为它的分节点,说22排的数非公式,我们则要与根基点的值进行比较,当小于根据点的值时,我们要将该节点插入到左子数当中,当时大于根据点的值时,我们只要将该节点插入到柚子数当中而当值等于根据点时则不进行插入,这就说明了在阿尔法学术当中,我们是没有两个值相同的节点的,所有经验值均不同就可以实现插入操作这是一个。什么意思?这是一颗把沙盘去数,我们要将一个值为5的节点插入到这个方法叙述当中,首先我们比较他与根结点的值,5:8要小,所以要将5插入到8阶点到左次数当中,所有指数的根基点为45:4要大,所以要将它插入到节点4到柚子出到周五几点4u字数的等级点的值为65:6要小,所以要将5极点插入到6极点的左子数当中,而左子数刚好为空,所以此时我们直接插入节点,这样我们就实现了22排余数的插入操作插入了一个节点,接下来我们一起来看它是如何用语言来进行实现的反光式类型,是一个整型类型的变量,表示如果插入成功,我们要return1插入,失败的时候return明,其实我们拥有一个word类型的返回式类型也是可以的,接下来我们把它传入到参数表。接下来我们再传入到参数表,第1个参数是我们要插入到这个r叉排序数,因为我们修改了它要进行插入,所以这里我们传递的是一个引用类型的变量,其实这种第2个参数是一个插入到关键字的值,好在函数体内部,首先第1个条件判断语句是判断该课22排序数是否为空,如果为空时我们则创意了改节点,用my log函数申请了一个空间,接着将它的关键词的值复制为传入的这个参数k,并且把左孩子节点和右孩子节点称之为空与它的一表示插入成功,接着第2个条件判断判断的则是该值是否等于跟节点,如果等于的话,我们来看算法是所以我们只拜最后一张中插入。注释足字数的根基点以及插入的值,反之的话,我们要插入到u子数当中,也是递归调用了该函数传入的参数,则是又一次数的更节点好,这就是插入操作,我们用一种递归的形式来实现了它,好,接下来我们来模拟一下该算法的语句是一个过程,我们一起来插入一个该科二叉排序数当中存在值的节点,比如说节点值为10的节点,我们插入这样一个节点,首先我们传入了根节点,根节点它是不等于空的且根节点它是小于我们传入到这个k也就是这个10,所以我们要将它插入到柚子数当中,也就是在这里我们return并且递归调用了a函数常用参数是右子数的根基点,也就是节点值为16的这个节点好,我们递归的调用了该函数发现十六十笔。之别屎要大的,所以我们要将插入到实用到镯子数当中,接着你就递归调用了该函数传入参数则是使用所有字数的分界点,也就是值为10的节点,然后我们依旧来从头判断时节点它不为空,但是时节点是与我们插入的,这个值是相等的,所以我们直接给透明了,也就是返回插入失败好,这就是该函数语句的执行过程,接下来我们来看下一个操作,下一个操作是构造二叉排序数,其实二叉排序构造方法是一种动态的方法,也就是不断调用插入函数来进行构造,读入一个元素并建立节点,若二十二数为空,则将其作为根基点,若r差排于数非空则将直小于更节点时插入到所指数当中,大于跟线时差入到u字数当中当值等于根据点时不进行插入,这个与插入的算法其实是。与插入的算法其实是一样的,接下来我们一起来看它的语言实现叫做create vst乘上参数是一个小构造的二叉排序数,第2个参数是什么呢?是对应关键字节点时的一个数组,也就是保存了我们所有要插入的元素,接下来第3个参数则是我们要插入节点的数量,首先我们说实话,该棵数的根基点为空并初始化了一个计数器,0也就是计算我们插入了多少个节点,当I小于我们要插入节点的总数时,我们进行插入插入,调用了我们刚才所编写的这个插入函数,插入算术,是这个22函数以及我们要插入到这个值,接着我们接下来再加也就是接着进行下一个元素的插入这就是构造过程早上拍过程我们要插到是这样一个元素。啊,分别是2143这样的顺序,首先插入第1个节点也就是元素值为2的节点,接着我们要插入是唯一的节点,叫它插入到r的左子数当中,然后插入只为4个节点插入到2的柚子树当中,接着你就按照我们插入算法的过程讲,三节点进行插入好,这样我们就构造出了一个二叉排序数,接下来我们来探讨这样一个问题,如果我们插入的元素值是相同的,但是插入的顺序是不同的,这样我们生成的28曰数会是一样的吗?我们来看,如果我们按照1234这样的顺序来插入这4个元素,它会产生一个什么样子的2产排序数呢,首先是第1个节点介绍是元素值为2的节点,依次我们对它进行插入,我们发现它与我们之前的这个22排的数是截然不同的,所以我们有这样的结论,在22排列数的过错过程当中,即使它值是相同的顺序不同。即使它值是相同的,那么它构造的顺序不同时,它产生的二次函数也可能是不一样的,而且我们发现如果q也是无需的,我们不发出一个非常小的单列表,而是函数数好,这就是二叉排序数的构造过程,最后我们一起来学习,20数到删除操作,我们来看这一条上排序数,如何对它进行删除呢?加设要删除7.4删除几点词之后,我们会发现一个流量下来了两颗子数,分别是几点4的左子数和10.4的60处,那么这两个子数应该如何形成节点8的组词数呢到其实他到其实我们交往过程范围了三叔接。的颜色直接进行删除,因为这些点如果是业绩点的话,它是没有孩子节点的,它的商业操作是比较简单的,也就是说如果我们想删除叶子节点,其实我们直接将它删除就可以了,它是没有破坏二叉牌去疏导性质的第2种情况是若被删除节点z由一颗子数,无论是它是左子数还是右子数,则让z的子数成为最负极点的子数代替自己点,我们来看这样一个例子,比如说我们现在要删除结点5,那么几点5只有一颗柚子树,所以我们直接删除几点5,并将她的柚子树作为他双亲结点的右子树,这样我们就实现了节点,只有一颗子数时的闪烁过程,那么当节点只有折似数时,它依旧是按照同样的方法绩效删除那为什么可以这样。谢谢,因为我们来看四极点的u字数当中所有极点的值均大于4,所以我们直接将删除起点news的数,作为4极点的USB数就可以了,而且该u字数在删除之前就是一个22排序数,所以当它作为4节点的用字数时仍为一颗28约束,那么他没有破坏22排序树的性质好,接下来我们看杉树的所有的情况是最复杂的一种,若被上升节点有两盒紫树,实则让自己的中序序列直接后继带病删除,直接后继结点,此时用上述过程就是按照前两个情况的过程,可能这样叙述大家会完全不明白,接下来我们来看一个例子啊,让大家理解好,这是一个22排的数,我们要删除几点四几点4,有两个指数,我们应该如何执行过程呢?首先我们是不是应该找到节点4的中序序列的直接后期啊。我的执行过程了,首先我们是不是应该找到结点4的中序序列的直接后继啊,怎么找这些后继呢?大家还记不记得中序序列的边攻城士卒子树根,结点柚子树,那么根基点的后继地点是不是就是柚子树便利性越大的第1个节点啊?所以我们来看柚子树也就是几点5倍等等这个数,那么这个数的第1个序列节点是什么呢?大家还记得吗?是最左侧的那一个节点,那么该字数的最左侧那一个节点则是几点五,所以它的便利序列第1个节点是1/2.5,我们将几点4替换
为几点5,并且删除原先的几点5,那么如何进行呢?我们会发现我们只要按照前一种情况进行就可以了,为什么可以这样?因为我们知道我们找到的后继节点也就是便于去给第1个节点是最左侧那一个没有如果他就。柚子树要么他只有柚子树,如果他有左子树,他就不可能是最左侧那个节点,所以我们此时删除时,则只需要按照前两种情况进行删除就可以了,这是按照请按2进行删除的,它只有一个子数,一个右子数,我们直接将它的右子数移到它的位置,然后这样我们就实现了删除过程,那么怎么样理解这样的删的过程啊?我们为什么可以采用这样的步骤,依旧可以维持r叉排序数的性质呢?因为我们知道在二上百序数当中,中序序列它永远是一个递增的,递增的有序序列,那么此时如果我们要删除某一个节点,时而且该节点有两颗子数,那么删除它之后会产生比较麻烦的情况,就是因为它会产生两个指数,我们需要解决的问题,就是找出这两个指数的根基点,那么如果找出呢,我们就采用了这几点是不是就是比这个级别比他又指出。找书呢,我们就采用了这个节点的后继节点,这个节点的直接后继点是不是就是比这个节点大,且比他柚子树当中剩余极简值要小的那一个节点,所以将它作为新的根节点,这样就依旧维持了22排序数的性质量,我们来看这个例子是不是4节点它的u字数有几点5和几点7啊,那么它的直接后继就是几点5节点5是比左子数都大的节点,前面又是数上下的数,上下的节点都要小的节点,所以它可以作为它们作为他们他们的更节点,这样我们依旧维持了22排叙述的性质好,这就是为什么我们可以采用这样的规则进行删除好,这就是删除的三种情况,接下来我们来探讨一个小问题,就是在调查反应数当中删除并插入某节点时得到的22位数,是否与原来相同。你的演示我们是连续的进行删除和插入某一个相同的节点,好,我们来看这样一个小例子,这是一颗二叉排序数,如果此时我们要删除叶子节点,其实那么它删除后的22排余数是这样的,我们直接删除了这个意思节点根据的是删除情况一好,接下来我们对它进行插入操作了,插入的依旧是值为7的节点,我们发现我们一休把它插入到了整个位置,这时插入后的28余数原先是相同的,那么有没有不同的情况呢?接下来我们来看,如果我们删除的是一个双十节点,他有幼孩子,那么他删除后的22个数是什么样子呢?我们根据了情况,二对它进行删除,得到了一个新的二次函数,接着我们依旧对它进行插入操作,插入几点5过后的事所以我们就这样几点。与原先的22排数是截然不同的,所以我们有这样结论,根据不同的节点,那么得到的22位数可能是相同的,也可能是不同的好,我们要注意一下这一个特点,最后呢学习22排一个数的最后一个小高点就是查找效率,那么查找效率,我们会在查找那一章认真的学习和比较,那么本节课,我们只是简单的介绍一下,老查百分数的产能效率如何对它进行估计,首先我们先要知识的一个知识点就是查找长度,查找长度则是查找根基点,是所经历的节点的数量,而平均差有长度,就是所有节点求和取平均值,它的缩写是asl,我们这里有一个结论,平均差额长度sl取决于数的高度为什么?因为我们知道最多的长长度是不是就是数的高度啊平均长度一节。速度是不是就是数的高度啊?也就是从根基点到最深的那一个意思,几点好,这就是平均查找长度以及二叉排球数的平均差长度的一个基本概念好,那么接下来我们简单地计算一下树的查找长度,首先是这样一个构造序列,我们之前构造出了这一棵二叉板结束,它的平均长度不会计算的好,这就是平均查找长度的过程,大家要注意的一点是,这是查找成功时的平均长度,为什么没有计算失败呢?因为我们知道失败是需要很多的新条件,没有那些条件我们是无法计算出一个确切的指导好,接下来我们就来看是如何进行计算的括号的部分不是所有的长度之和一代表了根结点的产生长度,我们只经历了一个根节点,所以它是一四。整合一节点经历了两个节点2合1,所以他是24也是2,所以是2×2,接下来的三是几点三分别经历了24和3好,这就是长度之和,接下来我们只需要处理一个4取一个平均就可以计算出它的平均查找长度了,那么大家还记不记得我们如果按这样的工作顺序,他的平均上的程度会有变化吗?他是会有变化的,我们通过刚刚的计算方法计算。那么大家还记不记得,我们如果按这样的过道顺序,它的平均差额程度会有变化吗?它是会有变化的,我们通过刚刚的计算方法,计算方法,计算出了它等于2.5,它是比原先的平均差值长度要大的,其实非常好理解,因为有一些节点它的深度变深了,所以有没有这样的结论,如果该刻22排的数是一颗平衡,22数的话,则它的产效率也是大o和rdn的数量级,那么它最坏的情况下则是啊构造序列有序的情况下,它的平行差长度的数量积则为大,one那么大,one其实是不是就是代表着单面表的平均差的长度啊,因为我们这里构造出来的二上百分数它类似于一个单片表好,这就是2叉盘数的产能效率,我们需要牢记的一个结论就是,我们要尽量把阿尔法函数构造出一个类似于平衡22数的概念,那么此时它的效率是最高的大额浪高点越是有序的。类似于一个单列表的时间复杂度被打弯好,那么平衡二叉树是不是非常重要?下节课我们就会学习平号上数字化知识,然后这就是本节课的内容。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值