#c
#c
Вопрос:
Конкретная задача заключается в том, что я должен скопировать целочисленные значения из двоичного дерева и создать связанный список с этими значениями. Проблема, с которой я сталкиваюсь, заключается в том, что когда я просматриваю двоичное дерево, получая каждое целое число в каждом узле, я не могу отправить значение узла в функцию выделения связанного списка
// Setting up the data structures:
struct node // node for the binary tree:
{
int data; // variable to store each integer value in the tree
node * left; // pointer for each right node
node * right; // pointer for each left node
};
struct list_node // node for the linked list
{
int list_data;
list_node* next;
};
// Function for linked list insertion:
list_node * appendList(list_node *current, int newData)
{
list_node *newNode = new list_node();
newNode->list_data = newData;
newNode->next = NULL; // now end of list
current->next = newNode;
return newNode;
}
void traverse(node* root)
{
if (root == NULL)
{
return;
}
traverse(root->left); // first recursive
// then send these values to the linked list
//cout << root->data << " ";
appendList(root, root->data);
traverse(root->right); // second recusive
}
Ошибка:
argument of type node is incompatible with parameter of type list_node
Ответ №1:
Этот вызов:
appendList(root, root->data);
Принимает list_node
указатель, но вы даете ему node
единицу.
Другими словами, вы пытаетесь использовать узел двоичного дерева в качестве узла списка, что на самом деле не то, что вы хотели сделать. Попробуйте использовать корень структуры списка, а не двоичный.
Комментарии:
1. Хорошо, это показывает мне, в каком направлении двигаться. Также означает ли это, что я не могу указать на ячейку памяти, на которую уже указано. Например: если узел указывает куда-то, node_list не может указывать на него?
2. Это правильно. Если у вас нет корневого узла для списка, вам придется выделить его. Думайте о них как о полностью независимых объектах.
Ответ №2:
In below function call:
appendList(root, root->data);
You are passing the incorrect first parameter i.e. root which is node of binary tree i.e. 'struct node' not 'struct list_node'.
**Solution:**
You have to pass the root of the list i.e. object 'struct list_node' as first parameter in function appendList.
**CHANGES**
struct list_node // node for the linked list
{
int list_data;
list_node* next;
};
// Function for linked list insertion:
list_node * appendList(list_node *root, int newData)
{
list_node *newNode = new list_node();
newNode->list_data = newData;
newNode->next = NULL; // now end of list
current->next = newNode;
return newNode;
}
void traverse(node* root, list_node* rootList)
{
if (root == NULL)
{
return;
}
traverse(root->left, rootList); // first recursive
// then send these values to the linked list
//cout << root->data << " ";
rootList = appendList(rootList, root->data);
traverse(root->right, rootList); // second recusive
}