6-9 二叉树的遍历 (25 分)
void InorderTraversal( BinTree BT )
{
if(BT)
{
InorderTraversal( BT->Left );
printf(" %c",BT->Data);
InorderTraversal( BT->Right );
}
}
void PreorderTraversal( BinTree BT )
{
if(BT)
{
printf(" %c",BT->Data);
PreorderTraversal( BT->Left );
PreorderTraversal( BT->Right );
}
}
void PostorderTraversal( BinTree BT )
{
if(BT)
{
PostorderTraversal( BT->Left );
PostorderTraversal( BT->Right );
printf(" %c",BT->Data);
}
}
void LevelorderTraversal( BinTree BT )
{
if(!BT)
return;
BinTree q[100];
int head=0,rear=0;
q[rear++]=BT;
while(head<rear)
{
if(q[head]->Left)
q[rear++]=q[head]->Left;
if(q[head]->Right)
q[rear++]=q[head]->Right;
printf(" %c",q[head++]->Data);
}
}
6-10 二分查找 (20 分)
Position BinarySearch( List L, ElementType X )
{
int high=L->Last;
int low=0;
while(low<=high)
{
int mid=(low+high)/2;
if(L->Data[mid]==X)
return mid;
if(L->Data[mid]>X)
{
high=mid-1;
}
if(L->Data[mid]<X)
{
low=mid+1;
}
}
return NotFound;
}
6-11 先序输出叶结点 (15 分)
void PreorderPrintLeaves( BinTree BT )
{
if(BT)
{
if(BT->Left==NULL&&BT->Right==NULL)
printf(" %c", BT->Data);
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
}