Собственно, программа почти готова. Как ни странно, не могу доработать удаление узла... | Код | #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; //-------------------------- struct ElemT { int Sod; ElemT* pLeft; ElemT* pRight; }*pHead = NULL; void AddUzel(ElemT* pCur,int value) { // добавление конкретного узла дерева if(value < pCur->Sod) { if(pCur->pLeft != NULL) // если значение меньше, двигаемся по "левой ветке" AddUzel(pCur->pLeft, value); else { pCur->pLeft = new ElemT; pCur->pLeft->Sod = value; pCur->pLeft->pLeft=NULL; pCur->pLeft->pRight=NULL; } } if(value > pCur->Sod) // иначе, двигаемся по правой { if(pCur->pRight != NULL) AddUzel(pCur->pRight, value); else { pCur->pRight = new ElemT; pCur->pRight->Sod = value; pCur->pRight->pLeft=NULL; pCur->pRight->pRight=NULL; } } if(value == pCur->Sod) { cout<<value<<" is already in tree"<<endl; return; } } void Add2Tree(int value) // проверка, не пустое ли дерево { if(pHead == NULL) // если дерево пустое - создадим первый узел { pHead = new ElemT; pHead->Sod = value; pHead->pLeft=NULL; pHead->pRight=NULL; return; } AddUzel(pHead, value); // если в макушке уже что-то есть - добавляем слева или справа } //--------------------------- // в итоге получае упорядоченное дерево, то есть меньшие элементы расположены // "слева", а большие - "справа". Рекурсивно распечатываем это дерево от меньшего // элемента к большему void PrintTree(ElemT* pCur) { if (pCur!=NULL) { PrintTree(pCur->pLeft); cout<< pCur->Sod<<' '; PrintTree(pCur->pRight); } } void create_new (ElemT *pHead) { std::cout << "Введите лист: "; int n; std::cin >> n; Add2Tree(n); } //--------------------------- int main() { setlocale(LC_ALL, ""); char c; std::cout << "\t___..Командное меню..___" << endl << endl; std::cout << "1 - новый лист;" << endl; std::cout << "2 - распечатать дерево;" << endl; std::cout << "q - выход из программы." << endl; std::cout << "Введите команду для управления программой: "; while (c != 'q'){ std::cin >> c; switch(c){ case '1': create_new (pHead); break; case '2': std::cout << "---------------------------" << endl; PrintTree(pHead); std::cout << endl << "---------------------------" << endl; break; case 'q': return 0; break; }std::cout << "Команда: ";} return 0; }
|
|