完全二叉树的定义我就不说了,可以去百度,这里的思想是,在检测到某节点A的左孩子或者右孩子为空后将标志位置0,如果在这之后又检测到其他节点左孩子或者右孩子非空,那么就可以判断这不是一棵完全二叉树。为了达到从上到下,从左往右的扫描顺序,我们使用层次遍历。代码如下
/**
* 检测一棵树是不是完全二叉树
* 这里采用层次遍历在遍历到某节点的子节点空时将flag置为0,之后若有其他节点的子节点存在则返回false
* @param node
* @return
*/
public boolean checkIfCompleteTree(Node node){
Node[] queue=new Node[255];
int tail=0;
int head=0;//队头指针与队尾指针
Node p=node;
int flag=1;
if(p!=null){
queue[tail++]=node;//将节点加入队列中
while(head!=tail){ //即队不空
Node temp=queue[head++];
if(temp.left!=null){
if (flag==0)
return false;
else{
queue[tail++]=temp.left;
}
}
else{
flag=0;
}
if(temp.right!=null){
if(flag==0){
return false;
}
else{
queue[tail++]=temp.right;
}
}
else{
flag=0;
}
}
}
return true;
}