2.右单旋的情况 原来的AVL树 插入一结点,A点不平衡 右单旋的结果 原来的AVL树 插入一结点,A点不平衡 先左旋 再右旋 3.先左后右双旋的情况 4.先右后左双旋的情况 原来的AVL树 插入一结点,A点不平衡 先右旋 再左旋 8.4 AVL树 8.4.3 AVL树的插入运算 AVL树与二叉搜索树的插入运算是类似的。惟一的不同之处是,在AVL树中执行1次二叉搜索树的插入运算,可能会破坏AVL树的高度平衡性质,因此需要重新平衡。 设新插入的结点为v。从根结点到结点v的路径上,每个结点处插入运算所进入的子树高度可能增1。因此在执行1次二叉搜索树的插入运算后,需从新插入的结点v开始,沿此插入路径向根结点回溯,修正平衡因子,调整子树高度,恢复被破坏的平衡性质。 8.4 AVL树 8.4.3 AVL树的插入运算 新结点v的平衡因子为0。现考察v的父结点u。若v是u的左儿子结点,则bal(u)应当减1,否则bal(u)应当增1。根据修正后的bal(u)的值分以下3种情形讨论。 情形1:bal(u)=0。此时以结点u为根的子树平衡,且其高度不变。因此从根结点到结点u的路径上各结点子树高度不变,从而各结点的平衡因子不变。此时可结束重新平衡过程。 情形2:| bal(u) | = 1。此时以结点u为根的子树满足平衡条件,但其高度增1。此时将当前结点向根结点方向上移,继续考察结点u的父结点的
原创力文档

文档评论(0)