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;
}
}
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
{
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;
}
}
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
{
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
妈的,真不象话啊!
怎么没我的分!
怎么没我的分!