00:00
下面我们来讲第二种情况,删除只有一颗指数的。呃,删除只有一颗指数的这种节点。嗯,这里面有一个问题,大家要想一想,就是你这一颗指数,就说这个节点有一颗指数,到底是左指数还是右指数呢?这个情况就比较复杂了,所以说我们一共有三种情况,那么我们在写代码的时候呢,可以先把第三种情况写出来,因为第三种情况比较好写,第三种情况是删除有两颗指数的这种节点,那如果说我把第三种情况排除去,注意听啊,看我这个思路。就是说我把第三种情况排出去,那留下的就只有第二种了,因为第二种情况如果你要去写的话,你还会,你还得去判断到底是左指数还是右指数,这个太太麻烦了,对不对,所以说我这样写,你看我怎么写这段代码啊,各位朋友跟上我的思路。
01:01
我还是找到deni know的。跟上我的思路,走到哪里呢?走这我们我们这样洗LE。要洗衣服。然后怎么办呢?这个SE这里我们。这样写,把这个先写上。这边呢,有个S。大家知道我我要干什么事情吧,就说我把这个条件写上去,大家看这个条件他是在做一件怎么样的事情,大家看这里,如果说target load target load,它的left。不等于空。它的它的left不等于空。并且大家看,并且target node它的right也不等于空,各位同学。这种情况满足的话,是不是就意味着这个target node,它下面它有左左右指数。
02:03
那也就是说实际上我们刚才写的就是删除有两颗指数的这种节点。那如果说把这个条件排除,又把上面这个条件排除,那剩下的第三种情况自然就是什么呢?就是删除只有只有一颗。一颗指数的节点,明白我的意思吧,那这样子就比较简单,所以说我们现在呢,就可以在这写代码,那同学们刚才根据我们原先对这这一个删除有两颗指数节点的思路,第一步,第二步咱们已经走过了,现在来看这里。从dark的这个柚子树,呃不不呃,写写错了啊,应该是这。那第三种情况我们待会再处理。现在我们研究的是。删除只有一颗指数的这种节点。前两步就是这一步和这一步前面已经走走了,现在我们要确定他的node的子节点是左子节点还是右节点,那么我们怎么怎么写呢?我是这样写的,大家看我们的思路啊。
03:10
我们的思路好,一边写一边做代码。我这样写,大家看能不能看懂。就是如果如果要删除到删除的这个节点。有有什么呢?有左子节点。桌子。节点,也也就是我们现在分析的这个问题。如果target note。诶,我我这应该是写这啊,应该是在这啊,在这儿就是如果target node有。着子节点。也就是现在老师写的这个东西,那现在开始写,如果什么呢?他给承诺的。点left。它不等于空。是不是此时此刻就是要删除的这个节点,它是由左子节点的。
04:03
那下面呢,我们接着看下一个逻辑,如果target是parent的左子节点,我们这么做,如果target node是parent的右子节点,我们这么做。试一试吧,那现在代码怎么写呢?那同学们跟着我的思路,我们写如果,呃,把这句话粘过来吧。把这句话粘过来。八。如果target有这样。跟上我的思路啊,跟上我的思路。如果target node是判的着,那就这样写了if。If,什么条件满足呢?就是我们这个parent。点left。点value。怎么样,它如果等于Y6。这说明parent是呃,Target node是parent的左子节点,因为parent na的左边这个字等于你要删除的,说明target给的就是你的着子节点,如果是着子节点,代码就应该这样写了,Parent。
05:07
点我们的left等于什么呢?Target?点它的left,为什么呢?因为我是你的左边,同时我我我的节点也是我自己有的,也是逐字节点,这个代码就写完了,这是一种情况A。As,就是如果不是这个条件呢,那说明target呢是parent的右子节点。对不对,这样就说明是什么呢?它是,呃,Target是parent的幼稚节点。右子节点。如果是右子节点的话呢,我们这个代码就应该怎么写呢,就这样写了parent。点他的right。等于target load点什么样还是na?因为我自己是有左子节点的嘛,好这个条件就行了,紧接着我们再来写下一个。
06:03
如果要如果要删除的就是另外一个情况了。好,我们看这个地方应该怎么写比较合理啊,那就S吧。那就S。那S这个条件就是什么意思呢。那就是说明。要删除的节点它有右子节点,因为现在已经是它,它只有一颗嘛,不是左就是右了吗?要删除的节点它有右子节点。那如果有右节点的话呢,我们仍然要去判断是如果target是判左节点还是右节点的,这个逻辑好,仍然这样写,如果parent。点它的ne。点value。对于这个value,跟上我的思路。Value。好,在这种情况下呢,我们怎么去处理,是不是让parent。点它的ne。
07:00
他的,因为parent是他的镯子节点了嘛,是不是。是左眼,这就等于什么呢,Target?点什么呀,Right这个理解吗情况。A,说明target是parent的幼稚节点。如果,如果target的是parent的右子节点应该怎么写呢?U,好U,那右子节点的话呢,那应该就这么写了,就应该是parent。点它的right。等于。他点他的right。对吧,诶是不是我这么写。啊,我们看看这边有没有写错left value等于好,这个应该是没有错的,因为我们这个条听到这个else就说明要删除的节点呢,它是有这个右子节点的,然后我再判断。如果这个target是parent左子节点,那么我就让parent的这个。
08:06
左子节点指向target的右子节点。是这样子的吧,同学们。因为我是你的。因为因为我我这个是我本身这个target是右节点的嘛,那同样如果是target not parent右节点呢,我就让parent right指向target的右边。好,代码是就写完了,那写完现在呢,我们可以来测一下到底OK还是不OK,来同学们我们玩一把。那一定要用测试的方式才能解决,那我们找哪一个节点来测试呢?显然,找一。一一现在呢,这个节点只有一个,呃,一颗指数,同时呢,它是右边,当然是右边,左边这个无所谓,好吧,无所谓,来我们玩一把。来同学们看啊,我把这个一打开。如果能够把这个一删掉,说明我们这个代码呢是可以的,刚才不是删不掉吗?现在我我来运行。
09:03
我运行过后呢,我们发现一被干掉了。一被干掉了,好,那么一一被干掉了,说明我们删除一颗指数是没问题的,那现在假如我这样写一个啊,同学们。如果我现在这个这个二我变成零。我变成零,各位同学。如果我把这个二变成零,请同学们先思考,先思考这个零它是不是一的?它就应该是一的着字节点。那同学们可以看一下,我先我先给同学们运行一下零是不是排在最前面的。同学们看现在情况是0123这个这个没问题啊,现在呢,我尝试着去删除这个零,大家看看可不可以成功好。因为您现在已经变成了我们。呃,我们这零。哦不不对不对啊,这样子我们对对对,我们我们还是删除一,我们还是删除一,你现在删除一的时候呢,你你删除一的时候,它下面有一个。
10:09
右指数就或者叫做呃左,左指数或者叫做右左呃左子界面这个时候就删除的是测试一下,如果我们删除的这个有一颗指数的节点,它的呃下一个节点是在左边的话,看看可不可以。验证一下走,我们发现呢。这个零没有删掉。哎,这个一这个一删掉了啊,删掉了正确的是这样子的,是这样子的吧,因为我要删除的是一嘛,我删除完了过后你会发现呢,诶的确是删除掉了。你看是不是。零保留了,一被干掉了,我们刚才演示的,如果这个是二。如果是二,是不是也把这个一删掉了。也把这个删掉了,看在运行。是不是也把一删掉了,这是OK的,也就是说现在左右两边都是OK的,没问题吧,好,那关于这一个就是删除指引删除。
11:10
删除什么呢?我们找到这里。诶,这个代码上哪儿去了。往这儿拉一拉。这地方不要乱哈,不要乱。这个时候我们演示的删除只有一颗指数的节,一颗指数的节点呢就成功了。好,那关于这块我们先给大家讲到这里,一会儿呢,我们再接着讲删除两颗指数的节点,马上就写。
我来说两句