Недавно я увидел вопрос в Интернете и хочу знать, есть ли более эффективное решение, чем то, что я сделал.Изменить правый указатель каждого листового узла на следующий листовой узел в двоичном дереве
Queus: изменить правый указатель каждого листового узла на следующий листовой узел в двоичном дереве.
Листья могут быть не на одном уровне.
узел бинарного дерева имеет форму:
struct node
{
struct node *left , *right ;
int key;
};
Я решил его с помощью LEVEL ORDER TAVERSAL (BFS) на дереве и, наконец, получили все узлы листьев в очереди.
Теперь соединительные узлы очень легко:
while(queue is not empty)
{
currentnode = queue.pop();
currentnode->right= queue.top();
}
currentnode->right= NULL;// queue becomes empty on taking out last node
я использую O (N) времени, но дополнительное пространство O (N). можно ли сделать, не занимая меньше места или места?