Пока я работал над реализацией дерева AVL, я столкнулся со случаем, когда вращение нарушает свойство BST.
Я почти уверен, что делаю что-то не так, но я не могу понять, что именно.
Я вставил 41, 49, 21 и 47 в дерево AVL. Когда я добавил 49 еще раз, это сигнализировало о «небалансе», как показано ниже.
(Out of balance !!!)
( at 49 L-R )
41 41
/ \ / \
21 49 => 21 49
/ /
47 47
\
49
Поэтому я попытался повернуть 47 влево и 49 вправо, как показано ниже.
Rotate 47 Rotate 49
to Left to Right
41 41 41
/ \ => / \ => / \
21 49 21 49 21 49
/ / / \
47 49 47 49
\ /
49 47
Дерево лучше сбалансировано, но я думаю, что нарушил свойство BST в правом нижнем поддереве, имея 49 справа от 49.
49
/ \
47 49
Я думаю, что лучший способ сбалансировать это дерево следующий
47
/ \
41 49
/ /
21 49
но я не знаю, как туда попасть с последовательностью добавления номеров 41-49-21-47-49. Может быть, это неправильный результат, но я здесь потерялся.
Каков будет оптимальный результат и как мне его достичь?
Может кто-нибудь сказать мне, что я делаю неправильно?
Большое спасибо!!!