2016-03-09 1 views
1

Не знаю, как сформулировать этот вопрос. В основном принимает следующий BST:Процедура удаления дерева двоичного поиска с детьми

 25 
    / \ 
    20  30 
/\ /\ 
18 23 27 31 
/\ /\ 
8 19 22 24 

Если бы я удалить значение 25 и вращать значение 20 в своем месте, он делает больше смысла для добавления 23 поддерева до 27, или для добавления 30 поддерева к 24. И я не имею в виду конкретное дело, но с более широкой точки зрения.

Просто чтобы быть ясно, что предпочтительнее между этими двумя аранжировок:

 20 
    / \ 
    18  23 
/\ /\ 
8 19 22 24 
       \ 
       30 
       /\ 
       27 31 

     20 
    / \ 
    18  30 
/\ /\ 
8 19 27 31 
     /
     23 
    /\ 
    22 24 

ответ

1

вращающаяся 20 не было бы мудрым решением. Вы должны либо заменить его максимальным значением левого поддерева, либо минимальным значением правого поддерева.

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

+0

Это делает смысл более понятным и проще реализовать, спасибо! –

+0

Имеет ли эта логика смысл: 1. Получить максимальное значение в левом поддереве (изначально корень левого поддерева) вместе с максимальным значением родительского узла (изначально корень текущего поддерева) 2. Если конечная родительский узел НЕ совпадает с исходным узлом, установите правильное поддерево этого родительского узла в левое поддерево узла с максимальным значением в исходном узле левого поддерева. 3. Дублируйте значение и частоту/возникновение узла с максимальным значением в левом поддереве исходного узла в исходный узел. –

 Смежные вопросы

  • Нет связанных вопросов^_^