сам код:
#include <iostream>
#include <string>
#include <conio.h>
#include <cstdlib>
using namespace std;
struct BinaryTree {
int Data; //поле данных
BinaryTree* Left; //указатель на левый потомок
BinaryTree* Right; // указатель на правый потомок
BinaryTree* BTree = NULL;
};
//создание бинарного дерева
void Make_Binary_Tree(BinaryTree** Node, int n) {
BinaryTree** ptr;//вспомогательный указатель
srand(time(NULL) * 1000);
while (n > 0) {
ptr = Node;
while (*ptr != NULL) {
if ((double)rand() / RAND_MAX < 0.5)
ptr = &((*ptr)->Left);
else ptr = &((*ptr)->Right);
}
(*ptr) = new BinaryTree();
cout << "Введите значение ";
cin >> (*ptr)->Data;
n--;
}
}
//печать бинарного дерева
void Print_BinaryTree(BinaryTree* Node, int l) {
int i;
if (Node != NULL) {
Print_BinaryTree(Node->Right, l + 1);
for (i = 0; i < l; i++) cout << " ";
printf("%4ld", Node->Data);
Print_BinaryTree(Node->Left, l + 1);
}
else cout << endl;
}
//прямой обход бинарного дерева
void PreOrder_BinaryTree(BinaryTree* Node) {
if (Node != NULL) {
printf("%3ld", Node->Data);
PreOrder_BinaryTree(Node->Left);
PreOrder_BinaryTree(Node->Right);
}
}
//обратный обход бинарного дерева
void PostOrder_BinaryTree(BinaryTree* Node) {
if (Node != NULL) {
PostOrder_BinaryTree(Node->Left);
PostOrder_BinaryTree(Node->Right);
printf("%3ld", Node->Data);
//симметричный обход бинарного дерева
void SymmetricOrder_BinaryTree(BinaryTree * Node); {
if (Node != NULL) {
PostOrder_BinaryTree(Node->Left);
printf("%3ld", Node->Data);
PostOrder_BinaryTree(Node->Right);
}
}
}
//симметричный обход бинарного дерева
void SymmetricOrder_BinaryTree(BinaryTree * Node); {
if (Node != NULL) {
PostOrder_BinaryTree(Node->Left);
printf("%3ld", Node->Data);
PostOrder_BinaryTree(Node->Right);
}
}
if (Node != NULL) {
PostOrder_BinaryTree(Node->Left);
printf("%3ld", Node->Data);
PostOrder_BinaryTree(Node->Right);
}
}
//вставка вершины в бинарное дерево
void Insert_Node_BinaryTree(BinaryTree** Node, int Data) {
BinaryTree* New_Node = new BinaryTree;
New_Node->Data = Data;
New_Node->Left = NULL;
New_Node->Right = NULL;
BinaryTree** ptr = Node;//вспомогательный указатель
srand(time(NULL) * 1000);
while (*ptr != NULL) {
double q = (double)rand() / RAND_MAX;
if (q < 1 / 3.0) ptr = &((*ptr)->Left);
else if (q > 2 / 3.0) ptr = &((*ptr)->Right);
else break;
}
if (*ptr != NULL) {
if ((double)rand() / RAND_MAX < 0.5)
New_Node->Left = *ptr;
else New_Node->Right = *ptr;
*ptr = New_Node;
}
else {
*ptr = New_Node;
}
}
//удаление вершины из бинарного дерева
void Delete_Node_BinaryTree(BinaryTree** Node, int Data) {
if ((*Node) != NULL) {
if ((*Node)->Data == Data) {
BinaryTree* ptr = (*Node);
if ((*Node)->Left == NULL && (*Node)->Right == NULL) (*Node)
= NULL;
else if ((*Node)->Left == NULL) (*Node) = ptr->Right;
else if ((*Node)->Right == NULL) (*Node) = ptr->Left;
else {
(*Node) = ptr->Right;
BinaryTree** ptr1;
ptr1 = Node;
while (*ptr1 != NULL)
ptr1 = &((*ptr1)->Left);
(*ptr1) = ptr->Left;
}
delete(ptr);
Delete_Node_BinaryTree(Node, Data);
}
else {
Delete_Node_BinaryTree(&((*Node)->Left), Data);
Delete_Node_BinaryTree(&((*Node)->Right), Data);
}
}
}
//проверка пустоты бинарного дерева
bool Empty_BinaryTree(BinaryTree* Node) {
return (Node == NULL ? true : false);
}
//освобождение памяти, выделенной под бинарное дерево
void Delete_BinaryTree(BinaryTree* Node) {
if (Node != NULL) {
Delete_BinaryTree(Node->Left);
Delete_BinaryTree(Node->Right);
delete(Node);
}
}