二叉查找树、平衡二叉查找树、红黑树、B树
二叉查找数是指排序之后的二叉树,具有以下性质
如果节点数是n个,二叉查找树的查找时间复杂度一般为 O(log(n)),最坏的情况下可能是O(n)
由于二叉查找树可能退化成链表,时间复杂度变成O(n)(此时树的深度是 n ),为了解决这一问题,产生了平衡二叉树。
平衡二叉查找数引入了平衡的概念,相对于二叉查找树,多了一个限制条件: 对于每一个节点,它的左右子树的深度之差不能超过 1 。当在插入或者删除元素时,可能会破坏上面那个规则,这个时候可以通过节点旋转将二叉树再次平衡。平衡二叉树的平衡性质将树的查找删除等操作的时间复杂度很好的稳定在O(log(n)),不会出现一般二叉树的最坏情况,不过平衡二叉树的旋转操作也会消耗时间O(log(n))
平衡二叉树的失衡调整是通过旋转最小失衡子树来完成的
当新插入节点在右子树的右节点上时,需要进行左旋,找到距离插入节点最近的一个不平衡节点(调整最小失衡子树),将该节点向左边旋转:
当新插入节点在左子树的左节点上时,需要进行右旋,找到距离插入节点最近的一个不平衡节点,将该节点向右边旋转:
当新插入节点在左子树的右节点上时,需要先进行左旋再右边旋转,找到距离插入节点最近的一个不平衡节点,先将该节点的左子节点左旋,再将该节点向右边旋转:
当新插入节点在右子树的左节点上时,需要先进行右旋再左旋,找到距离插入节点最近的一个不平衡节点,先将该节点的右子节点右旋,再将该节点向左边旋转:
红黑数,也是一种二叉查找树,满足一般二叉查找树的所有性质,对二叉树进行着色和规定以下一些性质,也可以将树维持在平衡状态:
B-tree 是为磁盘等存储设备设计的一种多叉平衡查找树,每个节点有多个分支。
与其他二叉树不同的是,B-Tree的一个节点包含有多个(t)关键码,根据t个关键码,其子节点就有 t+1 个,例如有3个关键字的节点有4个字节点,关于一个 m 阶的B-Tree有以下性质(m>=2):