2-3树是一种naive的数据结构,是平衡树的一种,也是查找树的一种。 一棵由以下节点组成的树称为2-3树。 ———2-节点:含有一个key和两条边,左边指向的2-3树中key都小于该节点,右边指向的2-3树中的key都大于该节点。 ———3-节点:含有两个key和三条边,左边指向的2-3树中key都小于该节点,右边指向的...
2-3树的查找和二分搜索树类似,不过因为一个节点可能有2个元素,需要对这两个元素进行比较,分别前往这个节点的左,中,右孩子继续进行比较 删除 2-3树的删除稍微复杂一点,删除可分为两大情况,就是删除叶子节点和非叶子节点。 这里只说理论情况,不结合代码实现,实际上代码实现会变得复杂也只是因为考虑的东西更多,代码...
AVL(平衡二叉树),它也是一种二分搜索树。 它的特点是每个节点的左右子树之差不超过1。在某种特殊的情况下,普通的二分搜索树可能退化为链表,例如加入的元素顺序为1,2,3,4,5。这个时候查询的效率会从O(logn)退化为O(n)。而我们解决这种特定的情况就需要采用平衡二叉树来解决这个问题。 AVL的定义 AVL的每个节...
2-3树,是最简单的B-树,其中2、3主要体现在每个非叶子节点都有2个或3个子节点,B-树即是平衡树,平衡树是为了解决不平衡树查询效率问题,常见的二叉平衡书有AVL树,它虽然提高了查询效率,但是插入操作效率不高,因为它需要再每次插入节点后维护树的平衡,而为了解决查询效率同时有兼顾插入效率,于是提出了2-3树。 2...
树由节点构成,每个节点都有一个父节点(根结点不存在父节点) 节点包含的链接可以指向不存在的NULL或者其他真实存在的节点 每个节点都可以包含多个子链接,将子链接的个数称为度;树的度是指所有的子节点中最大的度(将度为2的树称为二叉树、度为3的树称为三叉树等)。如图1~3示 ...
答案是:树的平衡。我们通过树的平衡,使得左右子树的深度保持在较小范围内,从而保证二叉树的查询效率。这就是平衡二叉树的核心思想。 这种能平衡左右子树的二叉树,我们称之为平衡二叉树。 官方对于平衡树的定义是:任意节点的子树的高度差都小于等于 1。常见的符合平衡树的有:2-3 树、B 树、AVL 树等。红黑树是...
官方对于平衡树的定义是:任意节点的子树的高度差都小于等于 1。常见的符合平衡树的有:2-3 树、B 树、AVL 树等。红黑树是一种特殊的自平衡树,其子树的高度差并不一定小于等于 1。AVL 树虽然查询效率高,但是插入、删除效率低,需要不断旋转以保持平衡。而红黑树通过牺牲一些查询效率,提高了插入、删除的效率。
二,AVL树的实现 2-1,AVL树节点的定义 2-2,AVL树的插入框架 2-3,AVL树的旋转 2-4,AVL树的总设计 2-5,AVL树的验证 2-6,AVL树的测试 前言: 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序时,二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。当向二叉搜索树中插入新...
满二叉树是平衡二叉树 上图这颗树不是平衡二叉树 当平衡因子(节点的左右子树高度差)>=2时,表示树不再是平衡二叉树 AVL树的实现 publicclassAVLTree<K extends Comparable<K>,V>{privateclassNode{publicK key;publicV value;publicNode left,right;publicint height;publicNode(K key,V value){this.key=key...
树的度:树中所有结点的度的最大值; 树的高度(深度):树中结点的最大层次; 森林:m(m>=0)个互不相交的树的集合,将一颗非空树的根结点删去,树就变成一个森林;给森林增加一个统一的根结点,森林就变成一棵树; 孩子结点:一个结点的直接后继结点称为该结点的孩子结点; 双亲结点(父结点):一个结点的直接前驱...