二叉查找树重点笔记

二叉查找树

定义

  • 根节点大于左结点,小于右结点

  • 存储方式:链式结构的二叉链表,既有info,左孩子,右孩子

递归法实现查找

struct node* find(struct node* root,int x)
{
  if(root)
  {
    if(x == root->info) return root;
    if(x < root->info) return find(root->left)
      return root->right//only this way
  }
  return NULL;//did not find.
}

question

  1. 二叉查找树如何实现插入,删除

    1. 插入类似查找,只不过是在最后会返回NULL的地方插入一个结点

    2. 删除比较复杂,但是也不过两种情况,叶子结点和非叶子结点

      1. 叶子结点中直接删除

      2. 后者则需要将被删除结点的两棵子树重新接上母树。此时可以从它的子树中找出一个满足定义的结点,将其替补上被删除结点的空缺。经过简单推理,发现这个替补结点肯定是叶子结点,因此我们选择将它的值赋予本应该删除的结点,再将这个替补结点删除。(也许这就是为什么书上叫它替身结点吧,代替别人去死了)

  2. 二叉查找树如何查找第几大(小)的结点

    1. 法一:提示二叉查找树中没有相同的结点,可以增加一个存储空间来表每个结点之后还有多少个结点

    2. 法二:利用树的遍历

拓展

平衡二叉查找树=ACL
  • 平衡因子是左子树的高度➖右子树的高度

  • 平衡因子在-1,0,1内为正常,超过就需要调整

  • LL,RR,LR,RL,重点秉持一个原则——左<根<右

  • 具有n个结点的二叉平衡树的最大高度和最小高度

    • 最大:斐波那契数列F(m)={1,1,2,3,5,8,11,......},F(H+2)-1<= H <= F(H+3)-1

    • 最小:完全二叉树:[对数]+1

    • 可以反过来思考:高度确定,结点数呢?

红黑树
  • 平衡性比AVL更弱,用红黑结点的约束关系来表示

    • 黑结点是主带,红结点是斑纹

  • 日后了解

B树
  • 一个基于大量数据的多路查找树,用来建立索引,索引在内存中,真实数据在外部存储器中。由于访问外部存储器的时间远大于访问内存的时间,因此只需要降低树的高度就可以降低查找时间。

  • 根结点和非叶子结点的要求有所不同,后者更严格

  • 叶子结点都在同一层,不携带任何信息,表示查找失败

  • 拓展:B+树

参考资料

  • 张同珍编著 《数据结构——C语言描述(慕课版)》 2018年8月河北第一次印刷 人民邮电出版社 ISBN:978-7-115-47603-6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值