delete_ (P-> Right, X);// шукати в правому поддереве
В
else {
// вузол знайдений, треба його видалити
// зберегти посилання на віддалений вузол
Q = P;
if (Q-> Right == NULL)
// праворуч NULL
// і посилання на вузол треба замінити посиланням на цього нащадка
P = Q-> Left;
else
if (Q-> Left == NULL)
// ліворуч NULL
// і посилання на вузол треба замінити посиланням на цього нащадка
P = P-> Right;
else// вузол має двох нащадків
Del (Q-> Left, Q);
delete Q;
} p> else
cout <<"Такого елемента в дереві немає" <
}
void TTree :: Del (TInfo Key)
{
delete_ (Root, Key);
}
// --------------------------------------------- ----------------
static void PrintTree (PItem R, TInfo L)
{
int i;
if (R! = NULL) {
PrintTree (R-> Right, L + 3);
for (i = 1; i <= L; i + +)
cout <<'';
cout < Key <
PrintTree (R-> Left, L + 3);
} p>}
void TTree :: View ()
{
PrintTree (Root, 1);
}
// --------------------------------------------- ----------------
static void Search (PItem & P, TInfo X)
{
if (P == NULL) {
cout <<"Такого елемента немає" <
} Else
if (X> P-> Key)// шукається в правому поддереве
Search (P-> Right, X);
else
if (X
Key)
Search (P-> Left, X);
else
cout <<"Є такий елемент" <
}
void TTree :: Exist (TInfo Key)
{
Search (Root, Key);
}
// --------------------------------------------- ----------------
static void Node_Dispose (PItem P)
// Видалення вузла і всіх його нащадків у дереві
{
if (P! = NULL) {
if (P-> Left! = NULL)
Node_Dispose (P-> Left);
if (P-> Right! = NULL)
Node_Dispose (P-> Right);
delete P;
} p>}
TTree :: ~ TTree ()
{
Node_Dispose (Root);
}
// --------------------------------------------- ----------------
void inputKey (string S, TInfo & Key)
{
cout <
cin>> Key;
}
TTree * Tree = new TTree;
int N;
TInfo Key;
int main (int argc, const char * argv [])
{
do {
cout <<"1-Додати елемент в дерево" <
cout <<"2-Видалити елемент" <
cout <<"3-Вивести вузли дерева" <
cout <<"4-Перевірити існування вузла" <
cout <<"5-Вихід" <
cin>> N;
{p> switch (N) {
case 1: {
inputKey ("Введіть значення додається елемента", Key);
Tree-> Add (Key);
} p> ...