58 lines
1.0 KiB
Markdown
58 lines
1.0 KiB
Markdown
avlTree 自平衡二叉查找树 是在插入的时候进行旋转,使树的深度相同(不超过1)
|
|

|
|
|
|
splayTree 伸展树 是在搜索的时候将节点往上提,提到根节点
|
|
|
|
单次旋转
|
|
```graphviz
|
|
digraph{
|
|
label="初始状态"
|
|
l_6;l_77;
|
|
a_7[color=blue]
|
|
b_8[color=red]
|
|
a_7->l_6->l_5
|
|
a_7->b_8->r_9
|
|
b_8->l_77
|
|
l_6->r_66
|
|
}
|
|
```
|
|
```cpp
|
|
int tmp = a->data;
|
|
a->data = b->data;
|
|
b->data = tmp;
|
|
```
|
|
```graphviz
|
|
digraph{
|
|
label="交换ab"
|
|
l_6;l_77;
|
|
b_7[color=red]
|
|
a_8[color=blue]
|
|
a_8->l_6->l_5
|
|
a_8->b_7->r_9
|
|
b_7->l_77
|
|
l_6->r_66
|
|
}
|
|
```
|
|
```cpp
|
|
//之后处理节点,需要吧b_7移动到左边,a_8左指向b_7
|
|
//b_7左指向原a_8左(l_6),b_7右指向原b_7左(l_77)
|
|
//a_8右指向b_7右(r_9)
|
|
prt_tree tmp=a_8->lt;
|
|
a_8->lt=b_7;
|
|
a_8->rt=b_7->rt;
|
|
b_7->rt=b_7->lt;
|
|
b_7->lt=tmp;
|
|
```
|
|
```graphviz
|
|
digraph{
|
|
label="处理节点"
|
|
l_6;r_77;
|
|
b_7[color=red]
|
|
a_8[color=blue]
|
|
a_8->b_7->l_6->l_5
|
|
a_8->r_9
|
|
b_7->r_77
|
|
l_6->r_66
|
|
}
|
|
```
|