二叉搜索树

原理

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树。

二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。

二叉搜索树操作

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

  • 查找

    • 检索 val 是否存在,从根递归的开始查找

      • 若当前节点的 value 等于要查找的 val ,则已找到
      • 若 val < 小于节点的 value ,则递归的查找左子树,找不到则不存在
      • 若 val > 小于节点的 value ,则递归的查找右子树,找不到则不存在
  • 插入
  • 删除

    • 叶子节点:直接删除,不影响原树
    • 仅仅有左或右子树的节点:节点删除后,将它的左子树或右子树整个移动到删除节点的位置就可以,子承父业。
    • 既有左又有右子树的节点:找到须要删除的节点p的直接前驱或者直接后继s,用s来替换节点p,然后再删除节点s。

前驱:

后继:

你可能感兴趣的:(数据结构和算法)