• 二叉树(三)


    二叉树效率:

    在查找过程中,需要访问每层的一个节点,所以只要知道有多少层就知道操作多长时间。假设是一个满树:如表中显示

         节点数          层 数    
            1         1
            3       2
            7       3
           15        4
           31       5
         1023      10

    假设第一列的节点个数为N,第二列层数为L,则 N 比 2 的L次方少一。
    N = 2L - 1   -->    L = log2(N + 1)

    因此,常见的树的操作时间大致都是 N 以 2 为底的对数,在大O表示法中,表示为 O( logN )

    如果树不满,分析起来就很困难。不过,可以认为对给定层数的树,不满的树的平均查找时间肯定比满树的要短,因为它在较低的层上完成查找的次数比满树时少。

    树与其它数据结构的比较:

    1)在有1000000个数据项的无序数组或者链表中,查找数据项的平均比较是500000次,但在1000000个节点的二叉树中,只需要20或更少( 通过log2(N + 1) 算出来)的比较。有序数组可以更快的找到数据项,但是插入数据项平均要移动500000个数据项,在1000000个节点的树插入数据项需要20或更少的比较,再加上很段的时间连接数据项。

    2)在删除二叉树中,也是仅需要20次或更少的比较找到它,再加上一点时间找到它的后继,一点时间断开它的后继,以及连接它的后继。

    因此,树对常有的数据结构存储操作都有很高的效率。

    小结:

    1)树是由边连接的节点组成的。

    2)根是树最顶端的节点,没有父节点。

    3)二叉树中,节点最多只有两个子节点。

    4)二叉搜索树中,所有A节点的左边子孙节点的关键字都比A小,所有右边子孙节点的关键字都比A大。

    5)树执行查找,插入,删除的时间复杂度都是 O(N)

    6)节点表示保存在树中的对象。

    7)查找节点需要比较关键值和节点的关键值,如果比节点关键值小则转向左边,其它则转向右边。

    8)插入需要找到插入新节点的位置并且由它的父节点的子字段指向它。

    9)中序遍历是按关键值升序访问节点的。

    10)前序、后序遍历对解析代数表达式有用。

    11)如果一个节点没有子节点,删除它只要把它的父节点的子字段设置为null即可。

    12)如果一个节点只有一个子节点,删除它只要把它的子节点替换为它即可。

    13)如果一个节点有两个子节点,删除它要用它的后继替换它。

    14)在删除有两个子节点的节点中,会根据后继是被删节点的右子节点 还是 右子节点的左子孙节点的两个情况。

  • 相关阅读:
    定制自己的PHP语法-在PHP中实现unless
    欢迎使用CSDN-markdown编辑器
    在 Laravel 中通过 Artisan View 扩展包创建及删除应用视图文件
    直接可用的loading.js
    vue后退判断是否有历史记录,有就返回上一级,否则返回指定路由
    js防抖和节流
    IE增加Meta标签(IE=Edge,chrome=1)兼容IE问题
    如何覆盖 node_modules 里的文件
    js运行代码计时器
    vue打包font字体文件路径错误的问题处理
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2780744.html
Copyright © 2020-2023  润新知