123

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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值