BST——树家族之祖。
BST以(key,value)pair为节点,以树结构来组织数据。
特点1.每个节点的左子树节点都比他小,而右子树节点都比他大,即具有左小右大的顺序性;(此处采用无重复key的BST,有重复时加上“可以=”的条件即可)
特点2.BST的中序遍历即为一个sorted的元素序列。这也是BST的充要条件。
查找是BST操作的基础,插入和删除都要先执行查找操作,它们的复杂度也同查找操作。
因为有顺序性,BST的查找类似于二分查找,是O(logn)的,就树而言即为O(h)。注:h为树的高度。
极端坏的情况下,树高h可能就为n,那么O(logn)变成O(n)是不能接受的,就需要限制h而又保持BST形式的新形式,于是BBST家族诞生了。
BBST家族:
1.AVL树:BST与“平衡因子”之子,以平衡因子来限制树高h:条件是-1<=左子树高度-右子树高度<=1,即平衡因子只能取{-1,0,1}。若因动态操作平衡因此不是这三个数,就叫做“失衡”,则采用zig、zag旋转使其“复衡”,但这种亦步亦趋的方式又有点慢,所以更快的复衡办法是“3+4重构”。
在代码实现时注意:insert(e)之后可能会有祖先失衡,但经过一次复衡操作即可解决,此时可break;退出循环查找,即若找到一个就不需再查找其余祖先;但remove(e)操作带来的失衡可能会向上传递