#include< iostream >
#include<deque>
using namespace std;
struct SHAGUO
{
char data;
struct SHAGUO *lchild,*rchild;
};
typedef SHAGUO* bitree;
void createtree( bitree &shaguo)
{
char c;
cin>>c;
if(c=='#')
shaguo = NULL;
else
{
shaguo = new SHAGUO;
shaguo->data = c;
createtree(shaguo->lchild);
createtree(shaguo->rchild);
}
}
int isfulltree(SHAGUO *t)//判断是否完全二叉树
{
deque<SHAGUO *>shaguo;
SHAGUO *p = NULL ;
shaguo.push_front(t);
while(!shaguo.empty())
{
p = shaguo.front();
shaguo.pop_front();
if(p)//不为空左右孩子入队
{
shaguo.push_back(p->lchild);
shaguo.push_back(p->rchild);
}
else
while(!shaguo.empty())//找到空节点
{
p = shaguo.front();
shaguo.pop_front();
if(p)//空节点后还有节点 非
{
cout<<"非完全二叉树"<<endl;
return 0;
}
}
}
return 1;
}
void main()
{
SHAGUO * shaguo;
cout<<"先序输入二叉树节点 #代表空节点"<<endl;
createtree(shaguo);
if(isfulltree(shaguo))
cout<<"是完全二叉树"<<endl;
}
如何判断是不是完全二叉树
最新推荐文章于 2024-01-21 17:51:36 发布