Я дал Linked List Представление полного двоичного дерева в формате следующим образом:Создание бинарного дерева
Я должен преобразовать связанный список для завершения двоичных tree.I я использую очередь сделать то же самое. Я сохраняю корневой каталог в очереди, сохраняя его в переменной, указывающей на новый узел, который я создаю, а затем сохраняю левый и правый указатели и делаю это снова, но я получаю только один узел как вывод, когда обход предварительных заказов выполняется на самодельном дереве. Например. Связанный список - 1-> 2-> 3-> 4-> 5-> NULL, но при обходе предварительного заказа я получаю 1 в качестве вывода.
void convert(node *head,TreeNode * &root)
{
if(head==NULL){
root=NULL;
return;
}
queue<struct TreeNode* >Q;
Q.push(root); // Pushing root which is Null at start.
while(head!=NULL){
struct TreeNode * x=Q.front(); // storing
Q.pop(); //Popping
x=new TreeNode; //pointing this null pointer to a new node
x->data=head->data; // storing data
x->left=NULL; //Making left of this point to NuLL
x->right=NULL; //Making right of this point to NuLL
if(!root)root=x; // If root is null point it to x.
Q.push(x->left); // Push the left child pointer which is NULL
Q.push(x->right); // Push the right child pointer which is NULL
head=head->next; // Move further in linked list.
}
}
Подсказки: каковы значения 'x-> left' и' x-> right', которые вы вставляете в очередь? Что делает 'x = новый TreeNode' для указателя, который вы только что получили из очереди? Когда вы устанавливаете левый и правый указатели узла на что угодно, кроме 'NULL'? (Выньте ручку (cil) и кучу бумаги и пройдите через свой алгоритм вручную.) – molbdnilo
Двоичное дерево на вашем изображении фактически не является бинарным деревом. Двоичное дерево сортирует элементы по некоторым критериям: обычно меньше, чем родительский элемент, идет влево и вправо пополам. Для этого критерия поиск в двоичном дереве может выполняться для 'log (n)'. Вещь, которую вы пытаетесь сделать, больше похожа на кучу, чем на дерево. –
@SemyonBurov Его двоичное дерево не bst –