温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
我们在上次课的基础上呢,我们来继续删除,还是bay short tree,我们delete,我们在删除七这个节点,对删除七这个节点,我们继续删除。Delete so a no,我们再删除三这个节点,我们再继续删除,同学们,我们再删除一这个节点。好,同学们看到现在呢,我们原先这个二叉排序数一共有八个节点,我现在删掉了七个节点,其实大家现在想象应该还有一个节点就是十对不对,好这个时候呢,我们来运行看代码。这时我们看一下这个代码的执行效果。对。好,稍等一下。我们可以看到,现在的的确确只剩下最后一个节点十了,那今大家想想,这个时候这个十是不是是不是只有一个节点,那么一个节点的话,这时我们再去删除,你就会发现它会抛出一个空指针异常,这个地方会出异常。
01:06
为什么会出异常呢?我们先来看它在哪里抛出的异常运行。OK,大家可以看到的确抛出了一个异常,为什么抛出异常了呢?大家看,因为你在1175行会判断这个parent left会被空,然后你又去判断它是,可是非常遗憾的是,你在这个地方,因为只有最后一个节点了,对吧?那你这个target no的确是找到了,但是它的负节点其实这个时候已经是个空了,对不对,但是你却继续往下走,这就跑不起来,这是第一个现象,我们再来看,假如这种情况会不会也出现异常,你比如说我把这个也是,我把这个都去掉,我这个数组。就放了一个节点,比如说这个数组里边呢,我们就只有一个节点七,大家看只有一个节点七,其实这个时候你只要3G一个节点也会抛异常。
02:06
呃,原因呢,呃跟我们刚才分析的应该是一样的,你看你这个时候。这一个节点是那个root,直接是相等你上来过后就直接删,而你删整个在删除的过程中呢,你仍然是按照以前这个流程来走的,怎么一个流程呢?就这你先去拿到这个target loadde,然后去拿到target node的这个负节点,可是负节点其实这个时候应该是个空的,但是你没有做任何判断,所以说你这样运行依然会抛出一个控制针异常。大家可以看到仍然抛出一个空指针异常,这个位置呢,大致也是这个这个相似的地方,好,那这个问题怎么解决呢?其实非常简单,我们在进行这个操作之前,下面整个这个if if else else,你呢都不要去管,反正你总体来说只要这个parent它等于了空,那么我们就直接把这个数制成空就可以了,同时你这织完了过后呢,应该马上re,不要让他继续走,好我们来看看此时此刻能否完成刚才的。
03:17
这个任务好,比如只有一个细节点,大家看,删掉过后,二叉数为空,不能变历了,然后呢,我们恢复原先的代码,我们恢复原先的代码,同学们看到原先的代码呢,把它打开。打开我们把这个七删除掉,然后把原先这个八个节点的数字恢复好,我们这个时候再来看它会不会再抛一层呢,我们运行。好同学们,我们运行过后呢,我们发现也是正确的说这块这块呢是呃,原先这段代码的一个不完成地方,给他说一下。
我来说两句