完全二叉树是指除了最后一层以外,其它每一层节点都是慢的,如果最后一层也是满的,则它为完全二叉树,如果不是全满,缺少的节点都在右边,则也为完全二叉树
- 采用按层遍历方式,依次从每层的左边到右边遍历每个节点
- 如果当前结点有右孩子,没有左孩子,则直接返回false
- 如果当前结点并不是左右孩子都有,则往后的节点必须为叶节点(没有左右孩子的节点)
- 如果遍历过程中不返回false,则最终返回true
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class CheckCompletion {
public boolean chk(TreeNode root) {
// write code here
Queue<TreeNode> queue=new LinkedList<TreeNode>();
TreeNode node=root;
queue.offer(node);
while(!queue.isEmpty()){
node=queue.poll();
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
if(node.right!=null&&node.left==null)//如果此节点左节点不为空,右节点不为空,则返回false
return false;
if(node.left==null||node.right==null)//如果左右节点有一个为空,不确定哪一个,则剩下的节点必为叶节点
break;
}
while(!queue.isEmpty()){
node=queue.poll();
if(node.left!=null||node.right!=null)
return false;
}
return true;
}
}