高级树,AVL树和红黑树
树 (Tree) 二叉树(Binary Tree) 二叉搜索树(Binary Search Tree)
tree:
Binary Tree:
Binary Search Tree:
二叉搜索树,也称二又搜索树、有序二叉树( Ordered Binary Tree)、排序二又树(Sorted Binary Tree),是指一棵空树或者具有下列性质的二叉树:
- 左子树上所有结点的值均小于它的根结点的值
- 右子树上所有结点的值均大于它的根结点的值;
- 以比类推:左、右子树也分别为二叉査找树。(这就是重复性!)
中序遍历:升序排列
二叉搜索树 在极端情况下 节点都在一边 会影响搜索效率 解决办法:保证二维维度—> 左右子树结点平衡(recursively)
AVL树
- 发明者 G M. Adelson-velsky和 Evgeni Landis
- Balance Factor(平衡因子)是它的左子树的高度减去它的右子树的高度(有时相反)。balance factor= {-1, 0,1}
- 通过旋转操作来进行平衡(四种)
旋转操作
- 左旋
- 右旋
- 左右旋
- 右左旋
左旋
右旋
左右旋
右左旋
带有子树的旋转
参考动画: https://zhuanlan.zhihu.com/p/63272157
红黑树
红黑树是一种近似平衡的二叉搜索树(Binary Search Tree),它能够确保任何一 个结点的左右子树的高度差小于两倍。具体来说,红黑树是满足如下条件的二叉 搜索树:
- 每个结点要么是红色,要么是黑色
- 根结点是黑色 •
- 每个叶结点(NIL结点,空结点)是黑色的。
- 不能有相邻接的两个红色结点 •
- 任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。
性质
从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。