判断一棵二叉树是否是完全二叉树?
完全二叉树:二叉树每层从左到右依次排满
那么抽取一下什么情况不满足呢?
(1)当右子树不为空而左子树为空时
(2)当叶子状态时,假如叶子节点的左子树或者右子树还不为空,则表明不是完全二叉树
所以我们需要区分一下叶子状态的界限是某棵子树的左子树为空,进入叶子状态,其实右子树为空,也同样进入到叶子状态,但是由于情况1已经将左子树为空处理过了,那么我们只需判断右子树为空即可进入到叶子状态。
/**
* 问题描述:判断是否是完全二叉树
* 1.满二叉树
* 2.从左到右排满二叉树
*/
public boolean isFullTree(Node node){
if (node==null)
return false;
Queue<Node> queue=new LinkedList();
queue.add(node);
boolean isleaf=false; //临界状态判断
while (!queue.isEmpty()){
Node cur=queue.poll();
if ( (isleaf && (cur.left!=null || cur.right!=null))
|| (cur.left==null && cur.right!=null) ){
return false;
}
if (cur.left!=null)
queue.add(cur.left);
if (cur.right!=null)
queue.add(cur.right);
else //进入叶子状态
isleaf=true;
}
return true;
}

浙公网安备 33010602011771号