//////////////////////////////////////////////////
//IsCompleteBinTree()公有成员函数
//判断一棵二叉树是否是完全二叉树
//////////////////////////////////////////////////
template<class T>
bool BinaryTree<T>::IsCompleteBinTree()
{
LinkedQueue<BinTreeNode<T>*> LQ; //层次遍历用的队列
LQ.EnQueue(root); //根结点入队列
BinTreeNode<T>* ptr; //游标指针
int flag=0; //0表示遍历的前个结点是数据1:表示前个是空
while(!LQ.IsEmpty())
{
LQ.DeQueue(ptr); //从队列中取出一个元素
if(ptr!=NULL)
{
if(flag==1) //如果当前是数据节点但前个是空
return false; //说明不是完全二叉树
LQ.EnQueue(ptr->leftChild); //如果是空指针也可以压入队列的
LQ.EnQueue(ptr->rightChild);
}
else
flag=1;
};
return true;
};
///////////////////////IsCompleteBinTree()函数结束
//IsCompleteBinTree()公有成员函数
//判断一棵二叉树是否是完全二叉树
//////////////////////////////////////////////////
template<class T>
bool BinaryTree<T>::IsCompleteBinTree()
{
LinkedQueue<BinTreeNode<T>*> LQ; //层次遍历用的队列
LQ.EnQueue(root); //根结点入队列
BinTreeNode<T>* ptr; //游标指针
int flag=0; //0表示遍历的前个结点是数据1:表示前个是空
while(!LQ.IsEmpty())
{
LQ.DeQueue(ptr); //从队列中取出一个元素
if(ptr!=NULL)
{
if(flag==1) //如果当前是数据节点但前个是空
return false; //说明不是完全二叉树
LQ.EnQueue(ptr->leftChild); //如果是空指针也可以压入队列的
LQ.EnQueue(ptr->rightChild);
}
else
flag=1;
};
return true;
};
///////////////////////IsCompleteBinTree()函数结束