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 |
|