zoukankan      html  css  js  c++  java
  • 图解--二分查找树

    一、定义

       1.若它的左子树不为空,则左子树上所有结点的值均小于等于根结点的值;

       2.若它的右子树不为空,则右子树上所有结点的值均大于等于根结点的值;

       3.它的左右子树均为二分查找树。

    二、图解实例

    选取一个节点为参照根节点,会发现所有的左侧子节点小于等于参照点,右侧大于等于参照点。

    比如根节点9,  9所有的左侧子节点(5、2、7、1、3)都小于等于9.

    比如根节点13,13所有的左侧子节点(11、10、12)都大于等于13.

    1、查找

    查找节点 10:根节点9开始,10>9 右侧,10<13 左侧,10<11 左侧,找到10.

    2、插入

    插入 子节点 4:4<9 左侧,4<5 左侧,4>2 右侧,4>3 右侧

     

    3、删除

    删除节点(因为情况有多种,处理逻辑也是比较麻烦。)

    A:删除叶子:好吧就是一个干巴巴的叶子,好办,找到-删除。

       删除 7 ,这个7是叶子,那就找到并删除

     

    B:有一个分支的,删除节点,子节点上提。

      删除 2节点:找到2 ,删除2

      再上提子节点 1

    C:两个分支,节点删除,右子树最小的数代替被删除节点,

      因为右子树最多有一个右叶子,重新指定引用。

        删除 13,13有左右两个分支:

       因为 右分支肯定大于左面分支,所以上提右子节点 15

     

     四、其实三已经告诉了我们,会有一种极端情况

    二分查找树就是为了提高查询效率,而当前这种和我们写了一堆for循环是一样的。

    为了应对这种情况:又出现了平衡二叉树--红黑树。后面会提到。

  • 相关阅读:
    log4j动态添加appender
    【翻译】java里编写基准测试的一些经验
    java线程池:获取运行线程数并控制线程启动速度
    maven里的mirror和repository: 配置多repository
    使用maven shade plugin 打可执行Jar包
    activemq plugin开发指南及示例
    通过加入classpath的形式实现命令行运行java程序时引入第三方jar包
    java异常、异常处理机制
    内部类
    接口
  • 原文地址:https://www.cnblogs.com/sunchong/p/9521376.html
Copyright © 2011-2022 走看看