Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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) ", подскажите как..

Код: Выделить весь код
void TraverseTree(struct tnode *ptr) {
    if (ptr != NULL) {
        treeprint(ptr->left);
        // Печать: сначала identName, потом элемент из первого списка и все элементы из 2-го списка, которые к нему привязаны, потом ещё один из 1-го и все, которые из егонного 2-го и т.д.
        treeprint(ptr->right);
    }
}
Аналогичный вопрос.

Отправлено: 23:30, 05-05-2010 | #2