Сериализация троичного дерева в кл

Я пишу троичное дерево для поиска строк в c.

До сих пор я могу хранить строки и проверять, существует ли строка.

Пример вставки

Node *node_link(Node *this, char *line) {
 26   if(!this) {
 27     this = node_create(*line);
 28   }
 29   if(*line < this->ch) {
 30     this->left = node_link(this->left, line);
 31   } else if(*line == this->ch) {
 32     if(*(++line) == 0) {
 33       this->there = TRUE;
 34       return this;
 35     } else {
 36       this->mid = node_link(this->mid, line);
 37     }
 38   } else {
 39     this->right = node_link(this->right, line);
 40   }
 41   return this;
 42 }

Мне нужно вернуть строки, которые я вставил. Например, если я вставил

hat
cat
catpost
tent
tents
square
squarish

Я должен быть в состоянии извлечь список с теми же строками. Я не понимаю, если я делаю обход дерева (DFS). Как я могу получить список сохраненных предметов?

Пример обхода

void node_walk_link(Node *this, char *line) {
 44   if(this) {
 45     node_walk_link(this->left, line);
 46     node_walk_link(this->right, line);
 47     node_walk_link(this->mid, line_push(line, this->ch, 0));
 48   }
 49 }

Также как найти объединение двух тройных деревьев? То есть предметы из обоих деревьев без дубликатов.

0 ответов

Другие вопросы по тегам