tree
- root 树根
- node 节点
- leaf 叶子节点
- parent 父节点
- children 子节点
- 兄弟节点
二叉查找树
性质
- parent have two child, left and right
- key(left) <= key(parent) <= key(right)
TODO AVL树
带平衡条件的特殊二叉树.
TODO 源码实现
性质
- every node has a height property
- every node: abs(height(left(node)) - height(right(node)) <= 1
支持的操作
查找
同二叉树
插入
需要通过旋转来保持AVl性质.
分四种情况:
- 左左
- 右右
- 左右
- 右左
两两对称, 同方向使用单旋, 不同方式需要使用双旋转.
递归向上保持???
- TODO 伪码
TODO 删除
TODO red-black tree
concept
black-height 黑高度, 从节点到叶子节点的黑节点数
性质
- struct node{color, parent, left, rigtht, key}
- node color in {red, black}
- if node is leaf, color(node) == black
- color(root) == black
- if color(node)
= red, then color(left(node)) =
color(right(node)) == black - for every node, black height equals
查找
同二叉树
TODO 插入
- 找到可以插入的叶子节点位置
- 插入节点,并设置节点为红色
- 改变树结构维持红黑树性质.
- 父节点 == black结束.
- 父节点和叔节点为红, 设置父和叔为黑,父父为红,对父父应用平衡条件
- 父节点为红,叔节点为黑, …
TODO delete
TODO B tree
四阶B-tree: 2-3-4树 三阶B-tree: 2-3树
性质
- struct {parent, keys[], children[], cap}
- if node is not root or leaf, cap/2 len(children) < cap
- every leaf have same height