int main(void) { int i, maxBFS; char cmd[255], arg; TreeNode *root = NULL, *tmpNode = NULL; Vector v; do { printf("Введите команду (h - справка):\n"); scanf("%s", cmd); if (cmd[0] == '+') { scanf(" %c", &arg); if (cmd[1] == 'r') { if (root == NULL) { if (arg >= 'A' && arg <= 'Z') { treeAddNode(&root, arg - 'A'); printf("Корень %c создан\n", arg); } else printf("Ошибка. Введена недопустимая буква\n"); } else printf("Корень уже существует\n"); } else if (root == NULL) printf("Корень не создан\n"); else { tmpNode = root; if (cmd[1] != '\0') tmpNode = getNodeByPath(&root, &cmd[1]); if (tmpNode == NULL) printf("Ошибка. Такого пути не существует\n"); else if (arg >= 'A' && arg <= 'Z') { if (treeAddNode(&tmpNode, arg - 'A') != NULL) printf("Узел %c добавлен к узлу %c\n", arg, tmpNode->_data + 'A'); } else printf("Ошибка. Введена недопустимая буква\n"); } } else if (cmd[0] == '-') { scanf(" %c", &arg); if (arg >= 'A' && arg <= 'Z') { if (treeRemoveNode(&root, arg - 'A')) printf("Узел %c удален\n", arg); else printf("Узел %c не найден\n", arg); } else printf("Ошибка. Введена недопустимая буква\n"); } else if (cmd[0] == 'p') { KLP(&root, 0); } else if (cmd[0] == 't') { if (root != NULL) { vectorCreate(&v, treeDFS(&root)); for (i = 0; i < vectorSize(&v); i++) vectorSave(&v, i, 0); countNodesOnLevels(&root, &v, 0); maxBFS = 0; for (i = 0; i < vectorSize(&v); i++) if (vectorLoad(&v, i) > maxBFS) maxBFS = vectorLoad(&v, i); printf("Ширина дерева: %d\n", maxBFS); vectorDestroy(&v); } else printf("Дерево пусто\n"); } else if (cmd[0] == 'h') { printf("================================\n"); printf("Список команд:\n"); printf("+r CHAR - создать корень CHAR (A, B, ..., Z)\n"); printf("+ CHAR - добавить сына CHAR к корню\n"); printf("+PATH CHAR - добавить CHAR узел по заданому пути (s - сын, b - брат)\n"); printf("- CHAR - удалить первый найденный узел CHAR и его поддерево\n"); printf("p - распечатать дерево\n"); printf("t - выполнить задание над деревом\n"); printf("q - завершить программу\n"); printf("================================\n"); } else if (cmd[0] != 'q') { printf("Неизвестная команда\n"); } } while (cmd[0] != 'q'); treeDestroy(&root); return 0; }
Node * NodeExt::getChildByPath( const std::string & path_names ) { Node * self = as_node_pointer(); Node * result = self ? getNodeByPath( self, path_names ) : nullptr; return result; }