二叉查找树
要么是一棵空树,要么是满足以下性质:
- 若左子树不为空,则左子树上所有节点小于根节点
- 若右子树不为空,则右子树上所有节点大于根结点
- 它的左右子树也分别为二叉查找树
在查找一个树时可以使用二分查找思想,正常情况下查找的时间复杂度是O(logN)。但是如果出现极端情况,比如根结点只有左子树或者只有右子树,那就退化为链表,查找的时间复杂度就是O(N)了。
为了解决这个问题引入了二叉平衡树。
二叉平衡树
满足二叉搜索树性质,同时要满足每个节点的左子树和右子树高度差距至多为1。
平衡树能够保证左子树和右子树的深度不会有很大偏差,这样查找的时间复杂度稳定为O(logN)。但是二叉平衡树要求每个节点的左子树和右子树高度差至多为1,对于插入和删除比较频繁的场景来说,每次都需要左旋或者右旋去调整使之达到平衡树要求,这时平衡树的性能就会受影响。为此引入红黑树。