Вставка и удаление деревьев AVL

Я хотел бы знать, правильно ли я применяю следующие операции вставки и удаления в дереве AVL:

                                 62
                          /  \
                        44    78
                       /  \     \
                     17    50    88
                          /  \
                        48    54
  • вставка (42)
  • вставка (90)
  • удалить (62)
  • вставка (92)
  • удалить (50)

В этом вопросе при удалении удаленный элемент заменяется его преемником .

Вот как, я думаю, эти операции должны изменять дерево:

вставка (42) и вставка (90)

                                 62
                          /  \
                        44    78
                       /  \     \
                     17    50    88
                       \   /  \    \
                       42 48  54    90

       

удалить (62)

                                 78
                          /  \
                        44    88
                       /  \     \
                     17    50    90
                       \   /  \    
                       42 48  54    

вставка (92)

                                 78
                          /  \
                        44    88
                       /  \     \
                     17    50    90
                       \   /  \    \  
                       42 48  54    92

удалить (50)

                                 78
                          /  \
                        44    88
                       /  \     \
                     17    54    90
                       \   /       \  
                       42 48        92

1 ответ

Решение

Есть два случая, когда необходимы ротации:

                               ___62___
                        /        \
                     __44__      78
                    /      \       \
                   17      50      88
                          /  \
                         48  54

Вы подали заявку insert(42) правильно, но insert(90) создает несбалансированное поддерево с корнем 78(отмечено звездочкой): его правая сторона имеет высоту 2, а его левая сторона пуста:

                               ___62___
                        /        \
                     __44__      78*
                    /      \       \
                   17      50      88
                     \    /  \       \
                     42  48  54       90

Так что так не останется: простое вращение влево переместит на 88 вверх и на 78 вниз:

                               ___62___
                        /        \
                     __44__      88
                    /      \    /  \
                   17      50  78  90
                     \    /  \    
                     42  48  54    

У вас это было правильно для delete(62): это заменит корень на его преемника, который равен 78, а затем 62 удаляется:

                               ___78___
                        /        \
                     __44__      88
                    /      \       \
                   17      50      90
                     \    /  \    
                     42  48  54   

insert(92) принесет дисбаланс в узле 88:

                               ___78___
                        /        \
                     __44__      88*
                    /      \       \
                   17      50      90
                     \    /  \       \
                     42  48  54      92

И снова применяется простое левое вращение:

                               ___78___
                        /        \
                     __44__      90
                    /      \    /  \
                   17      50  88  92
                     \    /  \       
                     42  48  54      

delete(50)был правильно выполнен. Учитывая вышеуказанное состояние, мы получаем:

                               ___78___
                        /        \
                     __44__      90
                    /      \    /  \
                   17      54  88  92
                     \    /         
                     42  48        
Другие вопросы по тегам