zoukankan      html  css  js  c++  java
  • 细说二叉树的删除操作

      二叉树的删除有很多种方法,只要删除后满足二叉树的性质即可。我们先看先看一颗二叉树。

    例如我们要删除20这个节点。

    1、把30变成根,10变成25的左孩子。

    2、把10变成根,30变成10的右孩子。

    这两种办法都可以达到删除20的节点目的。

    我们可以这么做,是由二叉树的性质决定的。

    仔细观察这个树,我们会发现,20的左孩子都小于它,20的右孩子都大于它。所以经过1或2的操作,二叉树的性质并没有变。

    当然不止这两种方法,接下来介绍红黑树中使用的删除方法。

    还是以第一幅图为例,删除20节点。但在这里并不是删除20这个节点,而是找到一个适当的节点来替换20这个节点。

    这棵树中,我们还是可以找到两个点来替换20这个节点。10或者25。

    那么我们是怎么找到这两个点的呢?

    1、从删除节点的左子树找,找左子树中最大的节点。

      比如x是删除节点,他有左右孩子,Node *y = x->left; while (y->right != NULL ) y=y->right; 这样y就是x的左子树中的最大值。

    2、从删除节点的右子树找,找右子树中最小的节点。

      操作与找最大节点类似,把left变成right。

    找到这个替换节点后,将替换节点的其他信息替换成删除节点(值的信息除外)。这个替换节点,就是之前说的真正的删除节点。而20节点删除节点。

    无论哪种方法,都是为了维持二叉树的性质,只要在我们的操作之后,还能保持二叉树的性质,那我们的操作就算完成了。其次我们尽量让代码简洁易懂。

  • 相关阅读:
    Java中Bitmap的实现
    链接备用
    91家纺网,利用cookies登录
    selenium验证码pic处理代码,以91家纺网为例
    91家纺网,登录代码
    91家纺网,模拟浏览器登录
    91家纺网,models
    91家纺网,setting文件
    91家纺网,更新
    91家纺网,更新
  • 原文地址:https://www.cnblogs.com/ITgaozy/p/5153981.html
Copyright © 2011-2022 走看看