Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

MisterMyth

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
#include <Windows.h>
typedef struct binarytree
{
int Data; //поле данных
binarytree * Left; //указатель на левого потомка
binarytree * Right; //указатель на правого потомка
typedef int ElementType;
typedef struct AvlNode *Position;
typedef struct AvlNode *AvlTree;
struct AvlNode
{
ElementType Element;
AvlTree Left;
AvlTree Right;
int Height;
};
Position Find( ElementType X, AvlTree T );
} BinaryTree;
//вставка вершины в бинарное дерево
void Insert_Node_BinaryTree(BinaryTree** Node,int Data) {
BinaryTree* New_Node = (BinaryTree*)
malloc(sizeof(BinaryTree));
New_Node->Data = Data;
New_Node->Left = NULL;
New_Node->Right = NULL;
BinaryTree** ptr = Node;//вспомогательный указатель
while (*ptr != NULL)
if (Data < (*ptr)->Data) ptr = &((*ptr)->Left);
else ptr = &((*ptr)->Right);
*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;
}
free(ptr);
Delete_Node_BinaryTree(Node,Data);
}
else {
Delete_Node_BinaryTree(&((*Node)->Left),Data);
Delete_Node_BinaryTree(&((*Node)->Right),Data);
}
}
}
//создание бинарного дерева
void Create(BinaryTree** p, int x)
{
if(!(*p))//если указатель на корень дерева не равен NULL
{
BinaryTree* pnew = (BinaryTree*)
malloc(sizeof(BinaryTree));// выделяем память
pnew->Data = x;//заносим значение
pnew->Left = pnew->Right = NULL;
*p = pnew;
}
else
{
if((*p)->Data> x)
Create(&((*p)->Left), x);
else
Create(&((*p)->Right), x);
}
}
/*Вывод двоичного дерева на экран*/
void Vyvod (BinaryTree **p,int l)
{
int i;
if (*p!=NULL)
{
Vyvod (&((*p)->Right),l+1);
for (i=0; i<l; i++)
printf(" ");
printf("%d\n",(*p)->Data);
Vyvod (&((*p)->Left),l+1);
}
}
 
/*Проверка пустоты дерева*/
bool empty_tree(BinaryTree * Node)
{
if(Node==NULL) return true;
else return false;
}
//освобождение памяти, выделенной под бинарное дерево
BinaryTree* Delete_BinaryTree(BinaryTree* Node){
if (Node != NULL)
{
Delete_BinaryTree(Node->Left);
Delete_BinaryTree(Node->Right);
free(Node);
}
return NULL;
}
 
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i,n,temp;
BinaryTree * Root;
Root=NULL;
printf("Число элементов дерева\t"); scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&temp);
Create(&Root,temp);
}
if(empty_tree(Root))
{
printf("\nДерево пусто!\n");
getch();
return 0;
}
 
Vyvod(&Root,0);
Root=Delete_BinaryTree(Root);
if(empty_tree(Root))
printf("\nПамять очищена полностью!\n");
getch();
return 0;
}
 
 


Всего записей: 1041 | Зарегистр. 03-01-2015 | Отправлено: 16:46 10-04-2017 | Исправлено: MisterMyth, 16:48 10-04-2017
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru