度:指一个节点拥有子节点的个数。
深度:树的层数,根节点为第一层。
叶子节点:度为0的节点,即没有子节点的节点。

树的每一个节点,可以有N个子节点,但是每个子节点只有一个前驱节点。

二叉树

除了子节点外,每个节点有两个分支,左右子树,每个节点最大度数为2;

满二叉树

国内定义:

一个二叉树,每一层的节点数都达到最大值。(看上去就是一个三角形)

国外定义:

一个二叉树,非叶子节点度数都是2。(要么度为0,要么度为2)

平衡二叉树(二叉排序树)

树的左右子树高度差不超过1,空树也是平衡二叉树;左子节点比父节点小,父节点比右子节点小。

常用实现方法:红黑树、AVL等。

红黑树

也是平衡二叉树,C++的map、set都是红黑树实现的。

实现

插入、删除,会用左旋、右旋维持树的平衡。

场景

内存排序。

B树

属于多叉树(平衡多路查找树),用在磁盘文件组织,如数据库索引。

相比平衡二叉树,每个节点包含的关键字增多了,层级减少了,从而减少数据查找次数和复杂度。

B+树

B树的升级版,充分利用节点空间,让查询速度更稳定,接近于二叉法查找。

B+树与B树的区别:

  • B+树的非叶子节点,不保存关键字记录的指针,每个节点所能保存的关键字个数大大增加;
  • B+树的叶子节点,保存了父节点所有关键字和关键字记录的指针,每个叶子节点的关键字从小到大链接;
  • B+树的根节点关键字数量和其叶子节点个数相等;
  • B+的非叶子节点只进行数据索引,不会存实际的关键字记录的指针,所有数据地址必须要到叶子节点才能获取到,所以每次数据查询的次数都一样;