找回密码
 立即注册

微信扫码登录

使用验证码登录

搜索
查看: 62|回复: 0

11.第11节课第6章树

[复制链接]

5158

主题

3

回帖

1万

积分

管理员

积分
15576
发表于 2024-4-15 09:17:24 | 显示全部楼层 |阅读模式
我们呢,有先是便利算法。中式电力算法。后续便利算法,那么我们首先来看一下,先去便利,先去便利呢,它的方法呢,是二叉树。若为空数,则空插座,否则呢,访问根结点,访问根结点完了之后呢,再先是遍历多指数。

先去便利左指数,完了之后呢,再先去便利右指数。比如说我们看这样一个图。这样一个二叉树,采用先式便利。首先第一步呢,是便利我们的这样一个根结点。先访问根据点a。然后呢,再先去遍历卓指数变,先去遍历卓指数呢,卓指数呢,它的根据点是b。那么,

就访问b。再访问b的左指数b没有左指数,再访问右指数,右指数偏去变利了,就访问d。访问第二,再访问它的脖子数f。g左指a的左指数访问完了呢,再先去访问右指数。要子书啊,访问c,然后访问e。然后访问h。这就是先续便利的。顺序它的一个便利算法的这样一个顺序。

接下来我们再看一下。中续便利。中式便利呢。若二叉树为空树。的空仓库,否则。中续便利左指数,再把问根据点再中续便利右指数。我们来看一下。首先我们来看一下,这有一个这这个二这有一个这个二叉树的部分,我们要先中式遍历左子树。好,这方是这左边就是它的左子树,左子树呢?

我们还要。对这样一个部分来进行访问,那么b呢?没有所指数。要先去要终式建立b的所指数,那么b没有所指数,那么就访问根结点,那么先访问b。访问了d之后呢?再访问b的右指数中序电力,右指数中序电力,右指数d的这样一个部分呢?先访问它的左指数f。f呢,没有指数再访问d。

访问了d之后呢?再访问g。访问了这样一个a的所指数之后呢?再访问根结点。返回了根结点之后呢,再是中式便利,它的右指数那么c的右指数呢是一的,这样一个部分。一呢,没有所指数,那么就访问一。接下来,访问一亿的右指数中序访问右指数,那么最后呢?中序访问。

c根据点,然后访问根据点。啊,这样呢,就是我们中式电力的这样一个方法,它的这样一个顺序,接下来我们再看一下。后市便利的算法。若二次数为空数,则空操作,否则后续便利做指数。后续便利又指数。访问跟节点,我们来看一下。若二叉树。

那么,这是我们二叉树的部分,那么我们先后续遍历左子树a的左子树呢?是b的部分,先后续遍历b的左子树,再后续遍历b的右子树。那么b没有左指数,就后续遍历b的右指数b的右指数呢?这个d的部分呢?又要先后续遍历它的左指数。f再后续遍历它的右指数g,最后呢,遍历它的根节点d,然后呢,访问b。

访问这个根据点b。然后把左a的左指数遍,历完之后呢,再遍历a的右指数,后续遍历a的右指数。后续便利a的右子数量,那么便利c的这样一个部分要便利一一二,这从h这里开始h这里开始h这里。访问访问了遍历了访问了h之之后呢,让他访问e然后呢,接下来访问c。最后呢,访问a。这个是我们后续便利二叉树的这样一个方式,它的这样一个顺序。

我们来看一下我们的中序,前序,中序和后序,它的顺序。先前序呢,就是abcdefgh中式呢,就是BD。ag.eh CF后续呢?就是db。g he fca,这就是我们。中前序,中序和后序,它的这样一个顺序的方式。

接下来我们看一下。前序遍历二叉树的递归算法,中序遍历二叉树的递归算法,以及呢,后序遍历二叉树的递归算法。我们先来看一下,先是变利而查收的递归算法word preorder。be treet voidpingwisttm的type符号e。先是,遍历而查出e不t,如果t不为空数的话,那么先是遍历我们的。访问我们的节点,访问我们的数据。先续遍历所指数。

然后呢?先序遍历右子数,那么这是我们先是遍历的方法,那么我们看一下这个语句,what the pre what betray what what?序号,waste。天门的态度符号e,那么这是我们这样一个函数的,这样一个部分函数,这样一个指针的,这样一个部分。e和t如果数不为空的话,那么先访问我们的根结点,访问我们的结点。

掌握我们的根结点,然后呢,先去遍历我们的左指数,最后呢,先去遍历我们的右指数。这是一个递归的便利算法,这是我们先是便利二指数的递归算法,那么我们再看一下中式便利二叉树的递归算法。wide in order.b垂t void新waste tn的time符号eift如果数不为空的话,那么in order t child waste。变先遍历卓指数,然后呢?was tet data访问根节点。in order.

tr child.waste再中序遍历右子树,这是我们中序遍历二叉树的递归算法。接下来我们看一下后续遍历二叉树的递推算法word postorder be tree word。新waste ta的type符号eift如果是不为空的话,先后续遍历所指数。在后续便利柚子树,最后呢,把握根据点,这是我们后续便利而常说的递归算法。那么便利算法呢?有这样一些应用,比如说统计二叉树叶子节点的个数,就是我们的先续便利。求二叉树的深度,

这是我们的后续便利复制二叉树,这是我们的后续便利。建立二叉树的存储结构,这也是我们的二叉树的便利的这样一个部分。首先我们来看一下统计,二叉树中叶子阶段的个数,比如说先序遍历先序或中序或后列遍历二叉树。在便利过程中呢,查找叶子节点并计数,由此啊,需要在便利算法中增加一个技术的参数。将访问节点的操作呢,改为弱势页子,那么则计数器加一。那么,

这是说我们统计二叉树中节点个数的这样一个方式,我们来看一下这个程序。void cut leave be tree int符号count if tree。如果数不为空的话,业主。但业务。七指向跳的是法案。并且t指向rq的区法就是我们的,如果左指数。为空。并且呢,右子树也为空,那么我们呢,就看看着佳佳对叶子节点的计数。这里我们的t指向跳的呢,

是我们的左左。主还是指针。卓指数指针。t指向r跳的呢,是右指数指针。那么,贴纸上欠的呢?为空的话。那么,再缺乏那么就是。那么就是为真,那么70乘七二八二七二的为空,那么再取法呢?就是为真,当它左指数和右指数都为空,

那么都取法的话呢?就是为真,当它。当它为真的话呢,那么我们count就加加就加一,那么就自身一对叶之间呢,进行计数,那么接下来呢,再count if count if。七指向跳l跳着看着。count列夫t指向r child count。那么这样呢,就是对我们的。叶子节点的个数呢?那么进行计数,

那么这是我们。技术的这样一个方式对吧?技术的这样一个方式。那么,这是对我们叶子节点呢?进行计数,进行统计计数的这样一个这这样一个语句好了,我们再看一下二叉树的。便利求二叉树的深度,后续便利那么首先呢,分析二叉树的深度和它左右指数深度之间的关系,那么从二叉树深度的定义可以知道。它说的深度呢,因为其左右指数的深度呢,最大值加一,

因此呢,需要分别求左右指数的深度。算法中,访问节点的操作呢?因为求得左右指数的增度的最大值,然后加一。那么,我们来看一下这个程序int death。b退。业主。t取反这里呢,如果t为空数的话,那么它就是一个假值。那就是一个空值,那么空值啊,

再去哪就变成了一个增值,那么if我们的后面如果是一个增值的话,那么that's all。this more this value.就等于零。那么else?第二次内部测。等于。但是。l指向票的。this right=this or right。s八九=1加。that's next大于,that's right。问号连space。

that s right,那么就是。选择that's right,that和that's right。两个值中的最大值,然后加一。那么不给我们的ds八六,那么让它呢?让我们的让我们的这样一个最大值呢数的深度呢?那么加一最后呢return?在18名返回我们书的深度,那么这是我们的程序的部分,我们来看一下这个语句。inter guess.be tree和返回二叉树的深度if。

星号业主感叹号t。就是反xy=0 else。death left=death l。t指向。f child.this right?等于death t指上r child。而这个是分别呢,求左右指数的。这样一个深度。最后呢?选择左右指数。深度最大的最大值。中的最大的这个值,然后加一那么赋予我们this value,

最后呢?返回this value,它的值就是返回二叉树的深度。接下来我们看一下。这样一个BT load。序号,货币税。BT load序号t。eft那么如果呢?我们的数为空,那么ef呢?我们的数为空,那么取反的话,那么就是为真。那么if呢,

后面为真值的话,那么return now返回一个空值。业务t。指向lq的。ul.ptr=copy tree。t指向lq的复制所指数。else.ul ptr=null,如果左指数左指向左指数的指针呢?不为空的话。那么,就执行了l6 lp gr。copy tree.t指向l跳的复制,

我复制左指数,否则呢,返回一个空值,那么if t指向r跳的。如果我们的。t指向rq的不为空的话。那么,就执行6 RP PR。等于copy treet指向rq的复制u指数,否则呢,返回null。6 t=get tree load。t指向data。ulp tru rptr.retire not最后返回。

这样一个根据点的部分。那么,这是我们复制二叉树,它的这样一个方式。那么,这是我们二叉树啊,它复制的这样一个方式。那么,我们来看一下这个语句。BT load.星号copy tree BT load星tift,如果为空,那么把如果非空。如果为空,那么取反,

那么返回一个取反为真,那么返回一个null业务t的页,只需要要确认的不为空,那么执行。ul PR=copy,treet=ll。child复制所有指数l四六lp+0到。efp t=r。跳的不为空,那么执行urttr=copy tree rt tr。r跳的p+r跳的或者右指数l是6 RP+0的,最后呢ut=get tree。no det指向data ulp tru rptr return ug返回这样一个根节点的,这样一个值。跟进的这样一个指针的这样一个部分,

那么这就是我们二叉树的复制,那么这样一个部分。我们来看一下生成一个二叉树节点的操作算法。其数据业务呢为icon。左指针域为l ptr,右指针域呢为rptr。那么BT no de信号xt node at a里面的type item BT no de信号lpt rb tn oder ptr。eft=6。ET load.如果呢t等于。如果将我们的ub t no de这个值呢?赋给t它为空的话,那么取返回真那么返回一个一。这是我们的这样一个用的这样一个部分,那么t呢指向data。

等于icon那么进行一个数据的这样一个赋值。没有。ptr.付给我们的lt指向的lq的。trt tr指向覆盖我们的t指向rtl的最后返回t。那么,这是我们生成一个二叉树企业的这样一个操作算法的。这样一个部分。啊,比如说我们看一下。负12它出的这个过程。那么,这是二叉树的这样一个复制的,这样一个部分。那么dcbhkgfea啊,

这二叉树的这样一个复制的这样一个。复试的方式,这样一个方部分。那么,我们来看一下建立二叉树的存储结构。不同的定义方法呢,有不同的存储结构以及建立方法。那么,我们来看一下从输入的字符,建立二叉树,以及呢,从前序和中序的序列呢,建立二叉树。那么,以字符串的形式呢?

跟左指数,右指数定义高尔差数,比如说。空数以空白字符表示。自然。只含一个根节点的二叉树,以字符串的a空格。空格表示,空白字符表示。那么,这样一个二叉处呢?以这样一个字符串的形式来进行表示。啊word create betray。b tree括号t。那输入。

我们的这样一个字符。if ch等于。空白的那么t呢?等于no else if。c=ubd tree。虚反那么如果为如果为空虚反了为真,那么返回了一个overflow。那么t呢,指向data=ch那么生成我们的根结点create。betray.t指向child构造柏子树create bet reel child构造柚子树。那么,这是我们构造。二叉树的存储结构的这样一个部分。那么就是我们的算法的这样一个部分。

那么我们再来看一下有二叉树的先序和中序序列建树,那么仅知道二叉树的先序序列呢?是不能够唯一确定一个二叉树,那么如果同时知道二叉树的中序序列呢?那么我们就可以确定一个二叉树。我们阿尔法四的先序序列呢,是我们的根左子树右子树的这样一个形式,二尔法四的中序序列呢?是左指数跟右指数的形式,就是说我们看到这样一个情况,比如说我们的。这样一个22分的形式啊,是跟呢先去序列呢,是跟在前面,然后后面呢,

依次是左指数和右指数。二叉树的中序句啊,是左指竖在前面跟呢,在中间右指竖呢,在后面这是它的中序的这样一个便利的这样一个。实施的这样一个部分,比如说我们看一下。先是事业呢,首先第一个就是它的根根结点。这个根结点呢,后面呢是它的左子树和右子树,那么这里呢?中式事业当中a呢就是根结点。根据你前面呢,是它的左指数,

那么左指数呢,在我们的先驱序列当中呢,就是它的左指数,后面是它的右指数,那么在先驱序列当中呢,就是它的右指数。那么,我们可以看到a。这是它的左指数,右边呢?是它的右指数。那么我们再来看一下。在a的在先去序列当中a的左子数当中的第一个。部分就是我们镯子树的根结点,那么这个镯子树的根结点呢?

在我们中枢序列当中呢?在这样一个位置。那么,在它之前的呢?就是它的左指数,在它之后呢?就是它的右指数,那么所以说我们a呢?可以。是后面呢,可以连连连接上这样一个实际上这样一个b的部分,那么这是它的左指数,那么b呢?在b后面。在b后面呢,

是它的。是它的左右指数。是它的左指数和右指数。那么,这里呢b呢?就是它的这样一个左边呢,就是它的左指数那么是c。右边呢,就是它的右指数是d。那么,同样的,我们可以在这边看到。a的。右边呢,是它的右指数那么一呢,

就是右指数的根结点,那么就是右指数一就是右指数a的右子。a的右指数,右指数的根结点,那么e的右指数呢?它后面呢,是它的。左右指数是它的左右指数。那么就说ft呢,是它的左右指数。那么我们再看一下中序的序列,那么在中序序列当中呢?f呢。是左指数。f呢,

是它主要的ft呢,是它的左右指数,那么在ft当中呢f。就是根结点。在根结点当中呢,在我们的这样一个亿的左右指数当中呢。f呢排在后面,那么在它前面的呢?就是它的左指数,那么就是说我们下一个根结点呢?就是f。f后面呢,就是我们的左指数g。那么,这就是我们根据先序和中序序列找到我们。

大差数。它的这样一个构成形式的这样一个方式。然后我们来看一下这个程序部分。betray fort cher char free.数组跳。IO数组in tps int is in tn。那业主。n=0那么t 2=n。else k=4。I no.和PS在中税中呢进行查询,业主k=- 1 t=n else那么进行。递归。那么,我们来看一下递归程序的这样一个部分。

t=6 betray t等于指向data prep sef k=is。t=t指向l child=n else CRT BT。t指向跳的create。数组IO,数组PS+eifk,减sk,减is。业务。k=is+n- 1。t指向r跳的比那。else.crp BT.t指向r跳的垂数组IO数组PS+1+k-sis k+1。n-k-x- 1,这是我们递归程序的这样一个部分。

好同学们,我们来看一下线索,二叉树。线索而查出什么了,那么什么是线索而查出呢?线索链表的便利算法以及啊,如何建立线索表?线索链表便利二叉树呢?是以一定规则叫二叉树的交通节点呢?排列。成一个线序序列得到二叉树中节点的先序序列。中序序列或者或者说。后续序列。这实际上呢,是对一个非线性结构进行线性化操作,

是每个节点呢。在除了第一个,最后一个外,在这些现行序列中,有且仅有一个直接前缀和直接后继。但是呢,当二叉链表作为存储结构的时候呢,只能找到节点的左右,行业的信息,而不能直接得到节点,在任意序列中的前缀和后缀信息。这种信息呢,只有在便利的动态过程中呢,才能得到,因此呢,

引入了线索,而插数来保存这些在动态过程中得到的有关前句和后句的信息。那么虽然说啊,可以在每个节点中。增加两个指针域来存放,在便利时得到有关我们有关前期和后期信息,但这样呢,使得节点的存储结构呢,存储密度大大降低。由于有n个节点的二叉列表中呢,并存在必定存在n+1个空链域,因此呢,可以充分利用这些空链域呢。来存放节点的前期和后期信息,那么所以说我们的限度二叉树呢?

就是要借助含有n个节点的二叉树中的n+1个空间域。作为线索。直接指向便利。税中前期和后期节点。那么,我们来看一下这些部分,比如说我们这样一段插数,它的先是序列是abcdefghk。中序序列呢,是BD cah gk fe后序序列呢,是DC bh KC fea。那么,现索尔商铺呢?它便利的实质呢,是非线性结构,

线性化,那么就是前驱后继。前需要后继呢,是在便利中得到的,知道前需要后继了,在便利时呢,就不需要再可以在线索二叉链表结构中呢,增加前需要后继两个指针域。那么n个节点呢?n个超出了有增加一个空间域,可以利用,那么这是现状,超出了提出。那么,指向该线性序列中的前句和后句的指针呢?

称之为线索。那么说,指向该线性序列中的前句和后句的指针称之为线索,比如说。第一个。空列空列空空空列域。低的工业域。左边呢,指向它的前驱,在这样一个线性序列当中,它的前驱呢,是c,那么它就指向c。它的后期呢是e,它就指向e,

那么指向了该线性序列中的前序和后序的指针呢?称之为线索,包含线索的存储结构呢?我们称之为线索列表,与其相应的二叉处呢?称之为线索二叉树。我们在对现实业务中节点的规定呢,在二叉链表中节点中增加两个标志域。对吧,就说左右标注预额为宁可指针等于零,否则。若该节点的左子数不空,则l跳着的指针呢?指向左指数且l标记的指针值呢?为link=0。

否则。l child的域的指针指向其前驱,且标左标志的为线索。税的等于一。若该节点的右指指数不空。则r child的指针呢?指向其右子树选右标志域的值为link。等于零,否则r child的的指针呢?指向其后记且又标志的值呢?为three的。等于一那么这样定义的二叉树的存储结构呢?称为线索列表。我们来看一下线索列表的例行描述,还不define nendulink three的。

t went ner.three f db three load.tx的type data driver b three load crl child lrr child。what three ltt tag?our card.比如属于。load星号b three tree。这是定义了这样一个结构体的名称,以及呢,纸上结构体的变量的这样一个指针,那么我们来看一下线索列表的便利算法。由于在前驱列表中呢,添加了便利中得到的前驱和后期的信息,那么从而简化了便利的算法。那么我们看一下这样一个部分for。

p=first load t。分号pp=succp wes tp。这是我们。这样一个算法,这样一个部分,这一个利用的这样一个部分,那比如说对中序线索化链表的算法结构,那么中序便利的第一个节点,那么在中序。线索,发电当中节点的后继。那么,中续便利的第一个节点呢是?是在镯子树上。处于最左下没有镯子树的节点。

在中叙线索化列表中节点的后继呢,是没有右指数则为后继线索所指节点。否则呢,为其为对其幼子数进行中式便利式访问的第一个起点。我们看一下这个程序,看一下这个语句。b three treety的新waste TM的type e。t=p=t指向ll的t2指向t2指向根据点yp不等于t。那么这个空诉呢,或者说便利结束的时候呢?p=ty 2p指向l log=link。p呢等于p指向l跳的。while p指向rtag=thread。并且呢。p指向rq的不等于t。

那么p呢?等于p指向rq的。wa step址上data访问之后就节点。最后呢?p=p指向rq的p静置了其右子树根,这是我们的。中叙线索发电的这样一个便利算法的这样一个方式。那么,如何建立线索列表呢?在便利过程中修改空指针,或先写出便利序列,再标出空指针,对照呢?再画出线索。那么,

这是建立线索面积表的这样一个方式。那么我们看一下这个部分status models tr ding betray符号three。btreeb three treet,这是中序遍历二叉树t,并将其中中序呢?线索化,所以这指向投机点。业务感叹号。所以。straight t.等于btb three tree。m2里的三个五。b属于漏斗。我们这个。为啥呢?

划分一个存储空间,划分一个头,建立一个存储,划分一个存储空间,并将这个地址呢给我们的three t。那么,当它呢?为空的时候呢?就返回。overflow.那么就退出那么这样一个部分,那么three t three t指向l log tag。等于link。three t指向rtub的等于three的。这是建立头几点?

three t指向r child=three t,那么又指成了为止。业务。赶到t那么不为空的时候呢?那么为空的时候呢?那么,three t指向child l child=three t,那么如果镯子链它是为空的,就镯子镯子的为止。else three t指向l child=t pre=three tin three t,那么中序便利呢?进行中序化线索化。除以。r child=three tpr er card等于three three的。与three的最后一个节点的线索化,

那么three tr child=three那么return okay?这是中叙便利二叉树,并将其中叙线索化。那么所以tr指向头几点?那么,这是我们便利二叉树。那么,这样一个方式。那么还有这样这样一个部分呢?restraining BT treep.ifp它不为空的时候呢in striding p指向lq的左指数线索化if。新p把感叹号p指向lq的不为空的话,那么p呢?指向l log=three的p指向l chair的等于pre,那么这是我们前期线索。

if pre指向rtag为空的话,那么ppr er tag=spread。PR er跳的等于p,这是后继线索。p,pre=p,那么保持p呢?指向p的前驱inserting p,指向。our child那么又指出了线索化,那么这是我们线索化的这样一个部分。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5432考试网 ( 蜀ICP备2022024372号|川公网安备51152402000101号 )|网站地图

GMT+8, 2024-5-2 11:04 , Processed in 0.078842 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表