2024-03-19 02:45:09 +08:00

1.0 KiB

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

splayTree 伸展树 是在搜索的时候将节点往上提,提到根节点

单次旋转

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
}
int tmp = a->data;
a->data = b->data;
b->data = tmp;
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
}
//之后处理节点,需要吧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;
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
}