Код:
![Выделить весь код](images/misc/selectcode.png)
void AddToTree(struct tNode *ptr, char[] identName) {
int cond;
if (рtr == NULL) { /* слово встречается впервые */
ptr = talloc(); /* создается новый узел */
ptr->name = strdup(identName); /* заталкиваем строку */
... /* А вот здесь надо инициализировать новый список, привязанный к этой вершине и затолкнуть в него первый элемент. Как? */
ptr->left = ptr->right = NULL; /* завершаем инициализацию новой вершины дерева путём установления указателей на её потомков в нули */
} else if ((cond = strcmp(identName, ptr->name)) == 0) /* это слово уже встречалось */
... /* Значит, для этой вершины уже есть список хотя бы с одним элементом => нужно затолкнуть в него ещё один */
else if (cond < 0) /* меньше корня левого поддерева */
ptr->left = AddToTree(ptr->left, identName);
else /* больше корня правого поддерева */
ptr->right = AddToTree(ptr->right, identName);
return ptr;
}
Помогите восполнить пробелы.
Хотя тут, наверно, можно ещё красивее написать, чем пугающие условия вида " if ((cond = strcmp(identName, ptr->name)) == 0) ", подскажите как..
Код:
![Выделить весь код](images/misc/selectcode.png)
void TraverseTree(struct tnode *ptr) {
if (ptr != NULL) {
treeprint(ptr->left);
// Печать: сначала identName, потом элемент из первого списка и все элементы из 2-го списка, которые к нему привязаны, потом ещё один из 1-го и все, которые из егонного 2-го и т.д.
treeprint(ptr->right);
}
}
Аналогичный вопрос.