00:00
情况下一个情况呢,要给大家解决的是删除的是。有只有一个节点的。这个节点删除的。节点。如果只有一个直接点。那么即该节点有左支点或者右支节点,比如这里面的一,我们看一下一。是不是只有?一个。自己电脑。哎,那这个情况呢,跟刚才不太一样。所以说这个时候我们看看这个思路应该怎么玩呢,大家看一下啊,如果是这样一个情况。如果是这样一个情况的话。我们这样来做。大家看,首先我们要排除去这个有两个节点的情况,叫先排,因为这个就是只有一个子节点的,这个代码呢,它不好写。所以你上来过后呢,先干一件什么事呢,就是先排除。先排除有两个。两个子节点。
01:02
子节点的情况。因为这样写完了过后,下面的代码就好写了。如果target内不等于空。这是一个情况,Else,又是一个情况,不就写完了吗?如果你要任去写这个是着自己的,还有点比较麻烦,所以说我的代码呢,就这样写了,大家看就在这个。删除地方写一点东西,代码就写完了,找到哪里找到我们的。这个二叉排序数大家看,我只要在DD里面加点逻辑就可以了,来。要是if。好。这个衣服呢,我们先排除。拍这这这个条件先写这个啊,就是如果target。target.no.need。它不等于空。各位。并且。target.right。也不等于空说明什么情况。
02:02
说明它是不是有两个。直接点的。好,那余下的这个情况是不是只有一种可能性,就这里面的情况只能是。只能是它只有一个节点的情况了。是不是这样写更简洁一些?你不然的话,你你写这个条件写到上面,你写好多了。好,这呢,我就说,呃,只有。一个直接点。就是target只有一个g target。他get的只有。一个直,这个是target load有两个直接点,那意思吧。他给的有两个。有两个,两个。两个直节点,好,那现在我们先写这个target只有一个直节点就比较简单,那就既然你只有一个直节点,是不是我要,我要我怎么做呢?我只要我我现在要判断target node到底是parent node的。
03:04
这个左子节点还是右子节点就可以了。好,现在我要做一件事,就是判断。这个target。NO4。Parent。Parent no的。漏的左。左子节点,左子节点。节左止节点还是。还是右子节点?那么我问大家一个问题,怎么知道这个target load是它的左子节点还是右子节点呢?可以看一下啊,目前我们分析分析第一个,假如现在这个情况,我们把这个打开,大家一分析就清楚了,首先我们来看目前这个parent是不是在这。Parent在这,然后我们的这一个什么呀,我们的这个target。
04:01
Target,哦,不,这个parent应该是在这儿。是这个吧,诶对,Target他在这儿,所以说你看这个地方,想着想着就容易想晕,那么我们这个target在哪里呢?Target在一。他一。实际上现在我们的我们的工作是怎样做呢?就是我们这个应该这样判断,是parent的点left等于它,还是它的右边等于它,才能关联起来,是这意思吧。因为你相当于这样子嘛,就是说相当于说,如果你这个一是我的左子节点,那么我就要把这个左边指向它的下一个就可以了。是这样子的吧。如果你是我右边,那就可以右边去做,所以说我们现在应该判断是parent的点left。Left的它的这个值是不是等于target,就是是不是等于这个值,如果等于的话呢,就让这个parent.left指向这个target的的target指向这个target的这个,呃。
05:09
还要判断一下是吧。但不知道该在哪边。他对,还得判断这个target的它是left的还是左右的。是吧,这还有还有,还不是那么简单呢。还得还得判断一下,还得判断一下。因为你你现在不知道他是哪一边的。因为你如果是你是我左边的,我就左边好,现在我们来判断一下这个东西吧,啊,就是先要判断这个东西。那我们先怎么写,先想一想啊,我们就照着这个先写一写。如果应应该这样写是不是更好一点,Target点就是。呃,应应该是target,它不是只有一个到这个地方,Target它只有一颗指数,是不是这个意思啊,诶我们应该这样写就简单了,它左边不等于空。
06:07
还是右边不等于空,这个逻辑是不是这样写更简单一点啊,就是它左边不等于空,怎么去处理A。就是你这个target不是只有一颗指数吗。左边不等于空,我们怎么去处理,右边不等于空,怎么去处理,是不是就简单一点了?好,然后你在这方不等于空的情况下再判断。在判断你这个target的下边是哪一个还有值。不用了吗?哪个地方?对,那就这样写了。如果。如果这个parent的。点它的这个left。这个不等于空,首先要判断不等于空是吧,不等于空,并且并且parent的判什么呀,Parent的这个。
07:09
Left。Left value。这个它的value等于value。然后怎么办呢?哦,然后就是parent的。点ne。等于谁target?对,Target。那这个情况写完了过后还还有要死吗?有没有S?有S吧?有那否则的话就是parent的什么呀。Rights。等于target的。Left。是这个意思吧,同样。下面代码呢。不对吗?
08:01
不对吗,这个。对的是对的吧,好,往下面再来一个判断。如果这个right。Right不等于空。并且它的right。的值等于这个值,那就是PAR left指向它的这个target的。是不是,诶这个这边应该是什么呀。Right。这边是不是也是right呀?是这样子,可不可以?这样还不对吗?这样子就对的呀,你看我这写的,快把这个拿过来看一下啊。我们来看看,这个跟我这写的是不一样的,我们把这个拿回来看一下。拿过来看一下。你看这儿。如果他的左边。
09:01
左边它不等于空,说明要删除的节点。在左子节点它是不会空的。然后呢,再判断。这其实对刚才有同学说的这个题上,其实可以不用判断的,就是左边这个只要相等。就把这个左边给它关联上。那么否则的话,把右边给它关联上。对吧,把这个左左边这个字挂到右边去,同样else的情况就是这写的,如果是这个,当然这个不等于空气是可以不写,如果说parent的它的left哦,这块还是left的,还是要写这个left。是不是还是要写left呀?是不是还是写left?点left。他这个na的值等于value,然后呢,这边是na的right给他,这边是right也给他,刚才这地方写写的有问题。是吧,前面前面这样写也没问题吧,就是因为你这边判断的是左边这个值。
10:00
是在左还是右这个问题好,我们把这个代码呢拿回来。前面这个没有错的。这边是写错了是吧,好,我们把这个先放过来啊,放过来把这个代码放到这。啊,放到这儿,放到这儿过后呢,我们来。来做一个测试,来做一个测试啊看看。这个能不能跑起来,能不能跑起来,我们来直接删除一个这样的节点。来删除一个什么呢?我们直接删除这个只有一个子节点的情况,哪个是只有一个子节点呢?By tree点。Delete。Delete里面有一个。就是我们从这看的这个一。把这个音先删除一下。好,删除这个一,我们运行一下。好运行。好,运行过后这个一呢,确实是被干掉了啊,这个没有问题。好,最后一个情况,把这个截段视频。
我来说两句