Как удалить узел в Ternary Tree?
Я работаю над реализацией Java-программы по вставке и удалению узла в троичном дереве.
Я могу внедрить вставку без каких-либо проблем, но я сталкиваюсь с некоторыми затруднениями при осуществлении операции удаления.
Итак, мой вопрос:
Как удалить узел из троичного дерева, если у него есть один или несколько дочерних узлов?
Было бы хорошо, если бы вы могли поделиться какой-либо логикой или псевдокодом для реализации функции "удаления".
1 ответ
Я нашел решение.
предполагать n
это узел, который мы хотим удалить, l
это его левый ребенок, r
это правильный ребенок и m
это его средний ребенок.
Если
n
является корневым узлом, а затем сделатьn
null
,Если
n
не является корневым узлом, проверьтеm
неnull
, Если это так, просто рекурсивно вызовите текущую процедуруm
, посколькуm
Матчиn
по значению: мы удалим последний соответствующий узел!Если
m
являетсяnull
, тогда мы имеем следующие возможные случаи:Если оба
l
а такжеr
являютсяnull
, а затем сделатьl
,r
а такжеm
значения в родительском узлеn
бытьnull
,Если только один узел, скажем
x
, (илиl
или жеr
) нетnull
затем заменитьx
ненулевое значение сn
и удалитеx
,Если оба
l
а такжеr
неnull
затем найдите узелz
с максимальным значением в левом поддеревеn
и заменитьz
ценность с сn
и удалить узелz
,