Tree to list - C (СИ)

Узнай цену своей работы

Формулировка задачи:

всем привет. помогите пожалуста. нужно перевести дерево в лист inorder дерево:
typedef struct TreeNode
{
  struct TreeNode *left ;    //Pointer to the left child.
  struct TreeNode *right ; //Pointer to the right child.
  Data TreeNode_info;        //The data of this tree node.
} TreeNode;
лист:
typedef struct ListNode
{
  struct ListNode * next ; //Pointer to the next node in the linked list.
  Data ListNode_info;        //The data of this list node.
} ListNode;
Data:
typedef struct 
{
  int key ;  //The key value of this particular piece of data.
  float val ;  //Another value of this particular piece of data.
} Data;
подпись функции: (возвращает Head листа)
ListNode * tree_to_inorder_list(TreeNode * root)
спасибо большое буду рад помощи
я написал вот так, но при распечатке листа получаю адреса, может кто поможет найти ошибку:
ListNode * tree_to_inorder_list(TreeNode * root)
{
 
    ListNode *head = (ListNode *)malloc(sizeof(ListNode));
    if (root == NULL)
    {
        return;
    }
    else
    {
        if (root->left != NULL)
            tree_to_inorder_list(root->left);
 
        add_node(head, create_list_node(root->TreeNode_info));
        if (root->right != NULL)
            tree_to_inorder_list(root->right);
    }
    return head;
}

Решение задачи: «Tree to list»

textual
Листинг программы
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
    
    
        if (root->left != NULL)
            tree_to_inorder_list(root->left);
 
        head =  add_node(head, create_list_node((root->TreeNode_info)));
 
        if (root->right != NULL)
            tree_to_inorder_list(root->right);
 
    
    
    return head;

Объяснение кода листинга программы

В данном коде реализуется функция tree_to_inorder_list, которая преобразует двоичное дерево в список в порядке inorder. Список реализуется с помощью связанных узлов. Указатель head указывает на первый элемент списка. В начале функции выделяется память под новый узел списка с помощью malloc. Затем рекурсивно вызывается функция tree_to_inorder_list для левого поддерева, если оно не пустое. Это нужно для того, чтобы в итоговом списке элементы шли в порядке inorder. Далее создается новый узел списка из информации о узле дерева с помощью функции create_list_node. В данном случае, в список добавляется узел, содержащий информацию о текущем узле дерева. Затем, если у дерева есть правое поддерево, вызывается функция tree_to_inorder_list для него. В конце функции возвращается head, который содержит список, полученный в результате преобразования дерева.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5