missiyou兄高见,高见啊~!
											[bo][un]missiyou[/un] 在 2008-10-16 19:23 的发言:[/bo]
感觉用数组映射一下结构树。然后遍历数组,如果数组中没有空就可说明它是满的。
呵呵,其实还有其它算法 好像书上有,我忘了,所以想了这个了法。 
missiyou兄高见,高见啊~!这个方法不错,我已经按照你的思路把代码写好了,已经测试通过了,
代码如下:
//////////////////////////////////////////////////
//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()函数结束
我觉得时间复杂度并不坏,这个利用的是层次遍历,只是多把其中一些结点的空指针也压入队列了,
时间复杂度在最坏的情况下是o(2*n+1),还好是线性关系的...