数据结构学习笔记-顺序查找及二叉树查找

395 阅读2分钟

查找

顺序查找

折半查找(二分查找)之插值查找

以上三种算法,本质是在分割点不同

二叉排序树(二叉树搜索树)

左小右大

二叉排序树 时间复杂度

不论哪一种操作,所花的时间都和树的高度成正比。因此,如果共有n个元素,那么平均每次操作需要O(logn)的时间。

算法实现

二叉排序树的操作主要有:

  1. 查找:递归查找是否存在key。
    • 首先和根节点进行比较,如果等于根节点,则返回。如果小于根节点,则在根节点的左子树进行查找。如果大于根节点,则在根节点的右子树进行查找。
  2. 插入:原树中不存在key,插入key返回true,否则返回false。
    • 二叉搜索树的插入过程和查找类似。
    • 新插入的节点一般在遍历的路径上的最后一点上,即叶子节点。
    • 如果待插入的数据比当前节点的数据大,并且当前节点的右儿子为空,则将待插入的节点插到右儿子位置上。
    • 如果右儿子不为空,则再递归的遍历右儿子。
    • 如果小于当前节点,则对左儿子做类似的处理就行。
  3. 构造:循环的插入操作。
  4. 删除:
    • 4.1 叶子节点:直接删除,不影响原树
    • 4.2 仅仅有左或右子树的节点:节点删除后,将它的左子树或右子树整个移动到删除节点的位置就可以,子承父业。
    • 4.3 既有左又有右子树的节点:找到须要删除的节点p的直接前驱或者直接后继s,用s来替换节点p,然后再删除节点s。

平衡二叉树(AVL树)

需要先找到最小不平衡子树
左旋 右旋 双旋