int treeDFS(TreeNode **node) { if (*node == NULL) return 0; return max(1 + treeDFS(&(*node)->_son), treeDFS(&(*node)->_bro)); }
// DFS.. void treeDFS(mynode *root) { printf("[%d] ", root->value); root->visited = 1; if (root->left) { if(root->left->visited==0) { treeDFS(root->left); } } if (root->right) { if(root->right->visited==0) { treeDFS(root->right); } } }
int main(int argc, char* argv[]) { root = NULL; // Construct the tree.. add_node(5); add_node(1); add_node(-20); add_node(100); add_node(23); add_node(67); add_node(13); // Do a DFS.. printf("\n\nDFS : "); treeDFS(root); getchar(); }
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; }