数据结构之树相关概念

概念描述
父子关系结点之间相连的边
子树当结点大于1时,其余的结点分为的互不相交的集合称为子树
一个结点拥有的子树数量称为结点的度
叶子度为0的结点
孩子结点的子树的根称为孩子结点
双亲和孩子结点对应
兄弟同一个双亲结点
森林由N个互不相交的树构成深林

image.png

概念描述
结点的高度结点到叶子结点的最长路径
结点的深度根结点到该结点的边个数
结点的层数结点的深度加1
树的高度根结点的高度
树的分类特性
二叉树1、一种特殊的树形结构,每个节点至多只有两颗子树
2、在二叉树的第N层上至多有2^(N-1)个结点。
3、最多有2^N-1个结点个数
全二叉树除最后一层外,其他的结点个数必须达到最大,并且最后一层结点都连续靠左排列
满二叉树除叶子结点外,每个结点都有左右两个子结点
二叉查找树任意一个点的左子树小于该点,右子树大于该点
平衡二叉树1、平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为 AVL 树, 可以保证查询效率较高。
2、具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。
红黑树1、每个结点不是红色就是黑色
2、不可能有连在一起的红色结点(黑色的就可以),每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据
3、根结点一定是黑色
4、每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点
B-Tree1、每个节点最多有 m 个子节点
2、除了根节点和叶子结点外,每个节点至少有 m/2 (向上取整,例如 3/2 = 1.5,这里取 2) 个子节点
3、若根节点不是叶子节点,那么根节点至少有2个子节点
4、所有的叶子都在同一层上
5、每个节点都包含 n 个 key,其中 m/2-1 <= n <= m-1
6、每个节点中的元素 key 从小到大排列,元素 key 的左节点的所有元素 key 值都小于等于元素 key,右节点的所有元素 key 值都大于等于元素 key
B+Tree1、所有非叶子节点只存储 key 信息,不存储 data(数据信息)
2、所有 data (数据信息)都存储在叶子节点中
3、所有叶子节点之间都有一个链指针
4、所有叶子节点包含了全部元素(key+data)的信息

思考?为什么要分满二叉树和完全二叉树呢?因为通过定义可以看出,完全二叉树只是满二叉树里面的一个子集
要想清楚上面那个问题我们要从树形结构的存储开始。
图解完全二叉树的存储.png

B-Tree由来,以查找100w数据为例,数据太大存储在磁盘

  1. 平衡二叉查找树,如果100w条数据放入到二叉查找树中,假设树的高度为n,则20+21+22+23…+2(n-1)=(2n)-1=1000000,计算出来n为20
  2. 因此查找100w条数据中一个数据时最多需要查询20次即可。如果是在内存操作的话,查询效率还是蛮高的
  3. 但是数据库中的数据都是存放在磁盘上的,每读取一个节点就需要一次磁盘IO,这样子的话查找100w条数据中的一个数据时最多需要20次磁盘IO,20次磁盘IO,这个性能对于磁盘来说太慢了
  4. 那么有什么好的方法来解决这个问题呢?答案就是使用B-Tree,即将这棵树压缩一下,减少树的高度,每层上可以容纳更多的节点,这样子就会减少磁盘IO次数从而提高性能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值