Программирование на языке высокого уровня. Марапулец Ю.В. - 74 стр.

UptoLike

Составители: 

Found = true;
else if (A < ElementX->Value)
ElementX = ElementX->Left;
else
ElementX = ElementX->Right;
}
if (Found)
return ElementX;
X *NewX; // Создание нового узла
NewX = (X *)malloc(sizeof(X));
NewX->Value = A;
NewX->Left = 0;
NewX->Right = 0;
if (A < Prev->Value) // Присоединение к левому поддереву
Prev->Left = NewX;
else // Иначе присоединение к правому поддереву
Prev->Right = NewX;
return NewX;
}
Для обхода дерева удобнее всего воспользоваться рекурсивной функции. Исход-
ный код такой функции будет приведен далее при изучении соответствующей темы. В
данном примере для вывода воспользуемся обычной функцией. В этом случае все пере-
движение по
дереву приходиться делать вручную, от его корня:
void PrintTree(X *Root)
{
X *p=Root;
//Корень дерева
printf("Main Root\t%d\n",p->Value);
//Левое поддерево
p=p->Left;
printf("Left Root\t%d\n",p->Value);
p=p->Left;
printf("Left Tree:\t%d",p->Value);
p=Root;
p=p->Left;
p=p->Right;
printf(" %d\n",p->Value);
//Правое поддерево
p=Root;
p=p->Right;
printf("Right Root\t%d\n",p->Value);
p=p->Left;
printf("Right Tree:\t%d",p->Value);
p=p->Right;
printf(" %d",p->Value);
p=Root;
p=p->Right;
p=p->Right;
printf(" %d\n",p->Value);
}
74
                       Found = true;
              else if (A < ElementX->Value)
                       ElementX = ElementX->Left;
              else
                       ElementX = ElementX->Right;
       }
       if (Found)
               return ElementX;
       X *NewX;       // Создание нового узла
       NewX = (X *)malloc(sizeof(X));
       NewX->Value = A;
       NewX->Left = 0;
       NewX->Right = 0;
       if (A < Prev->Value) // Присоединение к левому поддереву
               Prev->Left = NewX;
       else      // Иначе присоединение к правому поддереву
               Prev->Right = NewX;
       return NewX;
}

     Для обхода дерева удобнее всего воспользоваться рекурсивной функции. Исход-
ный код такой функции будет приведен далее при изучении соответствующей темы. В
данном примере для вывода воспользуемся обычной функцией. В этом случае все пере-
движение по дереву приходиться делать вручную, от его корня:

void PrintTree(X *Root)
{
       X *p=Root;
       //Корень дерева
       printf("Main Root\t%d\n",p->Value);
       //Левое поддерево
       p=p->Left;
       printf("Left Root\t%d\n",p->Value);
       p=p->Left;
       printf("Left Tree:\t%d",p->Value);
       p=Root;
       p=p->Left;
       p=p->Right;
       printf(" %d\n",p->Value);
       //Правое поддерево
       p=Root;
       p=p->Right;
       printf("Right Root\t%d\n",p->Value);
       p=p->Left;
       printf("Right Tree:\t%d",p->Value);
       p=p->Right;
       printf(" %d",p->Value);
       p=Root;
       p=p->Right;
       p=p->Right;
       printf(" %d\n",p->Value);
}

                                              74