int LevelTraBintree(Bintree *t, DoFunc df)//yyw
{
// to do...
Mynode *PCurrTnode;
int count;
void *temp;/* temporary data area*/
struct List *queue,
*free_list; /* our two queues */
int level=0;
/*--- set up linked-list data structures for queues ---*/
queue
= CreateLList ( CreateData1, /* in qapp.c */
DeleteData1, /* " */
DuplicatedNode1, /* " */
NodeDataCmp1 ); /* " */
free_list
= CreateLList ( CreateData2, /* in qapp.c */
DeleteData2, /* " */
DuplicatedNode2, /* " */
NodeDataCmp2 ); /* " */
if ( queue == NULL || free_list == NULL )
{
fprintf ( stderr, "Error creating queue\n" );
exit ( EXIT_FAILURE );
}
/*--- allocate the free list ---*/
for ( count = 0; count < QMAX; count++ )
{
if ( ! AddNodeAtHead ( free_list, PCurrTnode ))
{
fprintf
( stderr, "Could not create queue of %d\n",
QMAX );
exit ( EXIT_FAILURE );
}
}
/*--- begin processing file ---*/
if (t -> DummyHead -> link[RIGHT] == NULL) {
fputs("Empty tree\n", stdout);
return TREE_FAIL;
}
PCurrTnode = CreateData2 ( NULL );
if ( PCurrTnode == NULL )
{
fprintf ( stderr, "Error creating temporary data area\n" );
exit ( EXIT_FAILURE );
}
if ( DataCopy ( PCurrTnode, t -> DummyHead -> link[RIGHT] ) == 0 )
return ( 0 );
if ( enqueue ( queue, free_list, PCurrTnode ) == 0 )//树的根节点入队;
{
printf ( "Error enqueueing %s\n",
((pND2)PCurrTnode)->text );
exit ( EXIT_FAILURE );
}
else
printf ( "Enqueued %s\n",
((pND2)PCurrTnode)->text );
while ( queue->LCount > 0 )
{
if ( dequeue ( queue, free_list, PCurrTnode ) == 0 )
{
printf ( "Error dequeueing %s\n",
((pND2)PCurrTnode)->text );
return ( EXIT_FAILURE );
}
else
printf ( "Dequeued %s\n",
((pND2)PCurrTnode)->text );
df(PCurrTnode, level++);
if (PCurrTnode -> link[LEFT] != NULL)
if ( enqueue ( queue, free_list, PCurrTnode -> link[LEFT] ) == 0 )//树的根节点入队;
{
printf ( "Error enqueueing %s\n",
((pND2)PCurrTnode -> link[LEFT])->text );
exit ( EXIT_FAILURE );
}
else
printf ( "Enqueued %s\n",
((pND2)PCurrTnode -> link[LEFT])->text );
if (PCurrTnode -> link[RIGHT] !=NULL)
if ( enqueue ( queue, free_list, PCurrTnode -> link[RIGHT] ) == 0 )//树的根节点入队;
{
printf ( "Error enqueueing %s\n",
((pND2)PCurrTnode -> link[RIGHT])->text );
exit ( EXIT_FAILURE );
}
else
printf ( "Enqueued %s\n",
((pND2)PCurrTnode -> link[RIGHT])->text );
}
return TREE_OK;
}
123
最新推荐文章于 2019-11-05 21:11:20 发布