Как я понимаю нужно было только исправить ваши ляпы, чтобы программа заработала, так?
| Код | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h>
typedef long BT;
typedef struct _BinTree { BT inf; struct _BinTree *L; struct _BinTree *R; } BinTree;
//----------------------------------------------// BinTree *InsRec(BinTree **Tree, BT x) { if (!*Tree) { *Tree = (BinTree *) malloc(sizeof(BinTree)); (*Tree)->inf = x; (*Tree)->L = 0; (*Tree)->R = 0; } else if (x < (*Tree)->inf) { (*Tree)->L = InsRec(&(*Tree)->L, x); } else { (*Tree)->R = InsRec(&(*Tree)->R, x); } return (*Tree); } //----------------------------------------------// BinTree *Delete(BinTree *Tree, BT x) { BinTree* P, *v; if (!Tree) printf("warning: tree is empty\n"); else if (x < Tree->inf) Tree->L = Delete(Tree->L, x); else if (x > Tree-> inf) Tree->R = Delete(Tree->R, x); else { P = Tree; if (!Tree->R) Tree = Tree->L; else if (!Tree->L) Tree = Tree->R; else { v = Tree->L; if (v->R) { while (v->R->R) v = v->R; Tree->inf = v->R->inf; P = v->R; v->R = v->R->L; } else { Tree->inf = v->inf; P = v; Tree->L = Tree->L->L; } } free(P); } return Tree; } //----------------------------------------------// //вот эту функцию преобразовать в вывод древа void PrintTree(BinTree *T) { if (T) { PrintTree(T->L); printf("%3d", T->inf); PrintTree(T->R); } } //----------------------------------------------// int main() { srand(time(0));
BinTree *tree = NULL; int i; for (i=0; i<30; ++i) InsRec(&tree, rand()%99 + 1); //Древо из 30 элементов создаётся
//вот здесь вывести созданное дерево PrintTree(tree);
printf("\nInput deleted node: "); scanf("%d", &i);
Delete(tree, i);
PrintTree(tree);
// заново вывести с уже удалённым return 0; }
|
http://codepad.org/brRMgnh5
Бинарник с исходником ниже |