2016-12-16 11 views
-1

Я хочу знать, как удалить узел из неинверсивного двоичного дерева.C - Удаление узла из двоичного дерева

I.e. Если у меня есть это бинарное дерево:

....0.... 
...1.....2... 
.......3.....4.. 

И я хочу сделать удалить узел, где значение 2.

+0

Я не понимаю схему и где ваш код? – Stargateur

ответ

0

Если это отсортированный дерево (как дерево поиска), вы бы обычно удалите узел (2 в вашем примере) и замените его либо самым правым листом левого дочернего поддерева (3), либо самым левым правым поддеревом (4). Возможно, вы сможете сделать то же самое, если это не двоичное дерево поиска. Разумеется, это зависит от семантики вашего дерева и от того, что представляет структура (если есть). Если структура не имеет значения, просто удалите узел, который вы хотите удалить, и замените его на любой листовой узел.

+0

Должен ли я связать правый ребенок от 0 до 3, а затем связать правый ребенок от 3 до 4 и освободить 2? –

+0

Не забывайте о левом поддереве 2! Он может содержать больше, чем просто 3. Также будьте осторожны с указателями на детей 2, если у вас есть рекурсивная процедура для бесплатных распределений (вам может потребоваться установить их в NULL перед освобождением узла 2). Другим вариантом было бы просто переместить данные (3) из листа, где теперь 3, где значение, которое вы хотите удалить (2), теперь, а затем освободите листовой узел. Помните, что замена должна быть из листового узла. (Например, если вы хотите удалить 0, не выбирайте 2.) – e0k

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

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