Я не могу придумать рекурсивный алгоритм для этого. Моя попытка была:«Укупоривание» двоичного дерева поиска (удаление всех элементов> колпачок)
void capValue(Node node) {
if (node == null)
return
if (node.element > cap)
capValue(node.left)
node = null;
else // node.element < cap
capValue(node.right)
}
Однако, вы не можете просто обнулять узлы (в Java, по крайней мере, что я хотел бы кодировать это), поскольку это будет просто сдвигать текущий указатель на адрес 0, в то время как объект, от которого мы хотели избавиться, по-прежнему имеет «путь указателя» к нему через корень дерева и, следовательно, не будет собирать мусор.
С корневым значением '1' и левым дочерним элементом' 0', _cap_ до '0'. – greybeard
В этом случае первое сравнение будет выполнено вторым блоком if, а корень будет иметь значение null. – SamDJava
'root будет установлен в null' - even * if *, который был в этом случае: как вызывающий абонент получает доступ к дереву * cap * ped (' 0'/'left')? – greybeard