Каждый узел в полном двоичном дереве может быть идентифицирован его меткой. Другими словами, обход уровня CBT означает доступ к узлам в порядке возрастания меток. Я написал функцию getPointer, чтобы вернуть узел, заданный Root и Label. Например, в полном двоичном дереве, показанном ниже, ключ имеет метку , ключ 38 имеет метку 3 и так далее.Удаление последнего узла из полного двоичного дерева
1 / \ 2 38 / 5
Где я неправильно в следующем подходе? У меня есть структура узла.
node
{
rightChild
leftChild
value
label
}
C-стиле псевдокод:
getPointer(root, label)
if(label == 1) return root
else
{
temp_node = getPointer(root,label/2);
child = temp_node->left;
if(label == child->label) return child;
else return temp_node->right;
}
Помимо обработки потенциально NULL детей, если ярлык, который они запрашивают, слишком велик, ваш псевдо-код выглядит для меня звуком. – jschultz410
Возможно, вам захочется подумать о том, как вы можете преобразовать дерево в другую структуру, предлагая быстрый доступ к этой информации, но это другая проблема. – dfeuer