文章目录

  • 一、树(Tree)
  • 二、二叉树(Binary Tree)
  • 1. 特点
  • 2. 特殊二叉树
  • 2.1 斜树
  • 2.2 满二叉树(Full Binary Tree)
  • 2.3 完全二叉树(Complete Binary Tree)
  • 2.4 二叉排序树(Binary Sort Tree)/ 二叉搜索树(Binary search tree)
  • 2.5 红黑树(Red Black Tree)
  • 2.6 平衡二叉树(Balanced Binary Tree)
  • 2.7 平衡二叉搜索树(AVL树)
  • 2.8 哈夫曼树(Huffman tree)/ 最优二叉树
  • 三、多叉树
  • 3.1 B树(B-Tree、Balanced Tree)
  • 3.2 B+Tree
  • 3.3 B*树


一、树(Tree)

1.仅有一个根结点
2.除根结点外,其他结点只有一个父级结点。
3.所有结点可以有零个或多个子级结点。

分支结点(又称非终端结点) 叶子结点(又称终端结点)

二、二叉树(Binary Tree)

二分法是一种查找算法,二叉树是基于二分法衍生的结构,可以提高查找数据的速度;
二分法的时间复杂度为O(log2n)

1. 特点

每个结点至多只有两棵子树(通俗的说就是每个节点分叉不能超过2次)
二叉树有左子树、右子树之分,其次序不能颠倒。即使树中结点只有一棵子树,也要区分它是左子树还是右子树
只有跟结点,可以称空二叉树

2. 特殊二叉树

2.1 斜树

所有的结点都只有左子树的二叉树叫左斜树。
所有结点都是只有右子树的二叉树叫右斜树。
这两者统称为斜树。

2.2 满二叉树(Full Binary Tree)

叶子结点都集中最下一层。
除最下一层外,其它层的结点都有2个子结点

2.3 完全二叉树(Complete Binary Tree)

叶子结点只可能在最下的两层上出现。
当叶子结点的上一层只有1度时(只有一个分叉),此叶子结点必须是左叶子结点

2.4 二叉排序树(Binary Sort Tree)/ 二叉搜索树(Binary search tree)

左子树上所有结点的值都小于根结点的值,且右子树上所有结点的值都大于根结点的值;
二叉排序树和二叉搜索树互为别名, 指的是同一种树。

2.5 红黑树(Red Black Tree)

红黑树是一种特化的二叉查找树
根结点是黑色,结点是红色或黑色,所有叶子都是黑色,每个红色结点的两个子结点都是黑色
从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点

2.6 平衡二叉树(Balanced Binary Tree)

树上任一结点的左子树和右子树的深度之差不超过1。

2.7 平衡二叉搜索树(AVL树)

为了解决二叉排序树不平衡的问题,有了一种新的数据结构,平衡二叉搜索树(AVL树)
平衡二叉搜索树是计算每个节点的平衡因子(balance factor),
平衡因子是一个节点的左孩子的高度减去其右孩子的高度,
高度就是指从一个节点出发到达最远叶子节点所经过的最长路径。

2.8 哈夫曼树(Huffman tree)/ 最优二叉树

哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近
结点的权:若将树中结点赋给一个某种含义的数值,则这个数值称为该结点的权
结点的带权路径长度为: 从根结点到该结点之间的路经长度与该结点的权的乘积

三、多叉树

多叉树用于区别二叉树,多叉树上的结点的子结点可以是超过2的

3.1 B树(B-Tree、Balanced Tree)

B树又叫B-Tree、B树属于多叉树(平衡多路查找树)
B树比二叉树优势在于,同样的数据量,B树层级更小,宽度更宽,且B树可以达到自平衡结构
B树在每个节点都可以存储数据和子节点的指针

3.2 B+Tree

B+Tree就是B树的改进版本,B+Tree只在叶子节点才可以存储数据, 非叶子节点只会存储子节点的指针
B+Tree的性能要远远高于B树,
B树在范围查找时整个过程非常繁琐,采用B+树,只需要在链表上做遍历即可
当树的层级越高,磁盘IO的读取次数也会越多,查询性能越差
在文件系统和数据库系统中的索引,常常B树和B+树

3.3 B*树

B*tree就是在B+tree的基础上,对所有的节点都用指针连接,所有节点之间都是有链接的(并不是直接的连接)