这个二叉树的考试题怎么做

时间:2022-03-02 14:40:52

   3、给定一棵用二叉链表表示的二叉树,编写算法判定一棵二叉树T是否为完全二叉树。

帮忙给出代码,谢谢,要考试了

12 个解决方案

#1


借助栈进行二叉树的层次遍历, 应该可以判断的.

#2


能帮忙写个代码吗?

#3


写是可以

不过你的数据结构要是这样学下去
基本上就是白废了.

#4


考试来不及的,我不是学计算机的

#5


up

#6


up

#7


//在网吧,写个思路

bool f( TreeNode *root )
{
    TreeNode *child;
    Queue Q;    

    if( root )
    {
        Q.enterQueue( root );
        while( !Q.isEmpty() )
        {
           child = Q.deleteQueue();
           if( !child )
           { 
               if( !Q.isEmpty() )
               {
                    return false;
               }
           }
           else if( ( child->leftChild ) && ( child->rightChild ) )
           {
               Q.enterQueue( child->leftChild );
               Q.enterQueue( child->rightChild );
           }
           else if( ( child->leftChild ) && !( child->rightChild ) )
           {
              Q.enterQueue( child->leftChild );
              if( Q.GetFront() != NULL )
              {
                  Q.enterQueue( NULL ); //作为结束符
              }
           }
           else if( !( child->leftChild ) && ( child->rightChild ) )
           {
              return false;
           }
           else
           {
              if( Q.GetFront() != NULL )
              {
                 enterQueue( &Q, NULL );
              }
           }
           
        } 

    return true;
    }
    else
    {
      return true;
    }
}

#8


最后一个enterQueue( &Q, NULL ); ==> Q.enterQueue( NULL );

#9


层次遍历亦可,设置计数器标志所在层次最大的结点数

#10


不过一楼说层次遍历用栈...这个小的不敢苟同啊.
似乎是用队列八

#11


int IsFull_Bitree(Bitree T)//判断二叉树是否完全二叉树,是则返回1,否则返回0
{
  InitQueue(Q);
  flag=0;
  Enqueue(Q,T); 
  while(!QueueEmpty(Q))
 {
   DeQueue(Q,p);
   if(!p) flag=1;
     else if(flag) return 0;
       else
     {
        EnQueue(Q,p->lchild);
        EnQueue(Q,p->rchild); //不管孩子是否为空,都入队列
     }
  }//while
  return 1;
}//IsFull_Bitree

#12


妈的,真不象话啊!
怎么没我的分!

#1


借助栈进行二叉树的层次遍历, 应该可以判断的.

#2


能帮忙写个代码吗?

#3


写是可以

不过你的数据结构要是这样学下去
基本上就是白废了.

#4


考试来不及的,我不是学计算机的

#5


up

#6


up

#7


//在网吧,写个思路

bool f( TreeNode *root )
{
    TreeNode *child;
    Queue Q;    

    if( root )
    {
        Q.enterQueue( root );
        while( !Q.isEmpty() )
        {
           child = Q.deleteQueue();
           if( !child )
           { 
               if( !Q.isEmpty() )
               {
                    return false;
               }
           }
           else if( ( child->leftChild ) && ( child->rightChild ) )
           {
               Q.enterQueue( child->leftChild );
               Q.enterQueue( child->rightChild );
           }
           else if( ( child->leftChild ) && !( child->rightChild ) )
           {
              Q.enterQueue( child->leftChild );
              if( Q.GetFront() != NULL )
              {
                  Q.enterQueue( NULL ); //作为结束符
              }
           }
           else if( !( child->leftChild ) && ( child->rightChild ) )
           {
              return false;
           }
           else
           {
              if( Q.GetFront() != NULL )
              {
                 enterQueue( &Q, NULL );
              }
           }
           
        } 

    return true;
    }
    else
    {
      return true;
    }
}

#8


最后一个enterQueue( &Q, NULL ); ==> Q.enterQueue( NULL );

#9


层次遍历亦可,设置计数器标志所在层次最大的结点数

#10


不过一楼说层次遍历用栈...这个小的不敢苟同啊.
似乎是用队列八

#11


int IsFull_Bitree(Bitree T)//判断二叉树是否完全二叉树,是则返回1,否则返回0
{
  InitQueue(Q);
  flag=0;
  Enqueue(Q,T); 
  while(!QueueEmpty(Q))
 {
   DeQueue(Q,p);
   if(!p) flag=1;
     else if(flag) return 0;
       else
     {
        EnQueue(Q,p->lchild);
        EnQueue(Q,p->rchild); //不管孩子是否为空,都入队列
     }
  }//while
  return 1;
}//IsFull_Bitree

#12


妈的,真不象话啊!
怎么没我的分!