Я получил два бинарных деревьев поиска. Например, A и B. Затем меня попросили удалить дерево B из дерева A.
По делеции, я имею в виду удалить все узлы, присутствующие в B из A. Примечание: В не обязательно поддерево А.
например:
A:
50 / \ 10 75 / / \ 1 60 90
B:
10 / \ 1 75
Результирующее дерево должно быть:
50 \ 60 \ 90
Два подхода пришла мне в голову:
A1:
узел * deleteTree (узел * A, узел * B);
Возьмем корень дерева B. Удалить этот узел из дерева A (по методу нормального удаления BST). Затем разделить проблему на две части - для левого поддерева B и правого поддерева B. Для каждого из поддерева, Recurse. Для левого поддерева, узел , который занимал узел , который был удален должен служить в качестве корня для дерева A. Для правого поддерева, в заказовМой правопреемник удаленного узла следует сервер в качестве корня для дерева А.
A2: Другой подход немного странно. Я нахожу Симметричный и обход дерева А. Найти и удалить все узлы дерева B с помощью бинарного поиска вместе с рекурсией (мы не изменить предзаказ). Наконец recostruct наш BST от заказовМои (оставшейся) и предзаказа (без изменений).
Проб A: Найти эффективный способ для BST.
Проб B: Найти эффективный способ для любого бинарного дерева ( а не только BST).













