сериализация бинарного дерева

Тема в разделе "LANGS.C", создана пользователем systemio, 23 мар 2009.

  1. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    народ подскажите как сделать сер БД.

    общий вид структуры
    struct Node
    {
    int Data;
    Node* pOwner;
    Node* pLeft;
    Node* pRight;
    };

    В принципе можно сделать карту кто к кому принадлежит. но мне бы хотелось знать что нить профессиональное - либо натолкните на какой нить алгоритм. что по этому поводу говорит Кнут!? Заранее спасибо!
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Я бы сохранял у родителей кол-во дочерних узлов (в данном случае от 0 до 2), и расположил бы узлы по иерархии.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Код (Text):
    1. void SaveNode(Node* node)
    2. {
    3.   Write(node->Data);
    4.   Children->Left = (node->pLeft != NULL);
    5.   Children->Right = (node->pRight != NULL);
    6.   Write(Children);
    7.   if (node->pLeft) SaveNode(node->pLeft);
    8.   if (node->pRight) SaveNode(node->pRight);
    9. }
    10.  
    11. void LoadNode(Node* node)
    12. {
    13.   Read(node->Data);
    14.   Read(Children);
    15.   if (Children->Left)
    16.   {
    17.     node->pLeft = new Node;
    18.     LoadNode(node->pLeft);
    19.     node->pLeft->pOwner = node;
    20.   }
    21.   if (Children->Right)
    22.   {
    23.     node->pRight = new Node;
    24.     LoadNode(node->pRight);
    25.     node->pRight->pOwner = node;
    26.   }
    27. }
     
  4. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    rmn
    а что такое Children?

    Children->Left = (node->pLeft != NULL);
    Children->Right = (node->pRight != NULL);
    Write(Children);

    Скажи, этот алгоритм как нить по особому называется?
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    ну, это типа структура, в которой два поля типа bool - Left и Right. Если значение поля - true, значит у узла есть соответствующая ветка.

    хз :)
     
  6. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    rmn

    Спасибо тебе огромное - разобрался!
     
  7. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Depth-first search.
     
  8. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    s0larian
    ухты - и тебе пасиб!
     
  9. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    програмирование, алгоритмы - второй курс ВУЗа :)