关于树的一些知识梳理

树的遍历

  • 前序遍历:根左右
  • 后序遍历:左右根
  • 中序遍历:左根右

搜索二叉树

  • 是一棵二叉树
  • 任意节点的左孩子的值均小于自身的值,右孩子的值大于自身的值;
  • 中序遍历,是升序排列

平衡二叉树

  • 是一棵二叉树
  • 任意节点的左右两个子树的高度差不超过1(<=1)

平衡树的实现

  • AVL Tree
    • 每个节点都记录左右子树的高度差
    • 严格平衡
  • B Tree
  • Splay Tree

在这里插入图片描述

红黑树

  • 近似平衡的二叉查找树
  • 每个节点要么是红色,要么是黑色
  • 根节点是黑色
  • 红节点不能连续
  • 对于每个节点,从该节点至叶子节点的任意路径,都含有相同个数量的黑色节点

在这里插入图片描述

红黑树 vs AVL Tree

  • AVL Tree 查询相对来说较快;因为 AVL 是严格平衡的,而红黑树是近似平衡的
    • 为了严格的平衡性,付出的代价是:1.每个节点存的额外信息会更多;2.调整的频次也更高;
  • 红黑树的插入和删除操作相对来说比较快,因为调整的频次相对较低
  • 编程语言中的工具方法大多采用红黑树,而数据库层面多使用 AVL
    • 数据库中一般查询远大于插入修改

树的旋转

  1. 左旋转

逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子

  1. 右旋转

顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子

B 树

https://zh.wikipedia.org/wiki/B%E6%A0%91

  • B-tree,又称 B- 树
  • 是一种多路平衡查找树(多叉树)
  • 对于一棵 m 阶树
    • 每一个节点最多有 m 个子节点
    • 每一个非叶子节点(除根节点)最少有 ⌈m/2⌉ 个子节点
    • 如果根节点不是叶子节点,那么它至少有两个子节点
    • 有 k 个子节点的非叶子节点拥有 k − 1 个键
    • 所有的叶子节点都在同一层

在这里插入图片描述

在这里插入图片描述

B+ 树

  • 一种 B-tree 的变形树

  • 除了根之外的每个节点都包含最少 m/2 个元素,最多 m-1 个元素

  • 对于任意的结点有最多 m 个子指针。

  • 对于所有内部节点,子指针的数目总是比元素的数目多一个。

  • 所有叶子都在相同的高度上,叶结点本身按关键字大小从小到大链接。

  • 为什么 B+ tree 比 B tree 更适合做数据库索引

    • B+ tree 的磁盘读写代价更低
    • B+ tree 的查询效率更加稳定

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值