zoukankan      html  css  js  c++  java
  • 为什么使用二叉树?

    一、为什么使用二叉树?

      因为二叉树结合了有序数组,链表这两者的优点。在树中查找数据的速度和有序数组中查找一样快。并且插入数据和删除数据的速度和链表一样。

    二、在有序数组中插入数据项太慢

      有序数组:数组中的所有数据项都有序的排列。用二分查找可以在有序数组中快速查找特定的值。

    过程是先查看数组的中间的数据,如果中间数据比想要的大,缩写范围,在前半段找。反复过程查找的复杂度就是O(logN)。

      在有序数组中插入一个新数据,必须要找到新数据插入的位置,然后把所有比新数据大的向后移动一位。这样每次移动都很费时,平均要移动数组中一半的数据(N/2次移动),同理删除也是要多次移动。时间复杂度为O(N)

    三、在链表中查找太慢

      链表的插入和删除操作都很快,只需要改变一些指针的指向就可以。这些操作的时间复杂度只有O(1).但是在链表中查找数据可不容易。查找必须从头开始,依次访问链表中的每个元素。直到找到所要的数据。因此平均访问N/2个数据项。

      不难想到可以通过有序的链表来加快查找速度,链表中的数据项有序的,但这样做没有用的。即使是有序的链表还是必须从头开始依次访问数据项,因为链表中不能直接访问某个数据项,必须通过数据项间的链式引用才行当然有序链表访问结点还是比无序链表快多了,但是查找任意的数据项它无能为力。

    四、用树解决问题

      二叉树:树中每个结点最多只能有两个子节点。这样的树为二叉树。

      二叉搜索树:一个节点的左子节点的关键字值小于父节点,右子值大于等于父节点。

  • 相关阅读:
    vcruntime140.dll 14.0与PHP版本不兼容,PHP Warning: 'vcruntime140.dll' 14.0 is not compatible with this PHP build linked with 14.16 in Unknown on line 0
    PHP处理字符中的emoji表情
    Thinkphp5 使用unlink删除文件出错Permission denied
    TP5多字段排序
    TP5 按照汉字的拼音排序
    PHP发送微信模版消息
    [52ABP系列]
    [52ABP系列]
    通过微信公众号实现微信快捷登陆
    [Jexus系列] 一、安装并运行 Jexus
  • 原文地址:https://www.cnblogs.com/drq1/p/8418529.html
Copyright © 2011-2022 走看看