判断是否是完全二叉树
- 层序遍历,若一个结点有右孩子,没有左孩子,直接返回false
- 用leaf来标记后续必须为叶结点,如果leaf为true,而左右孩子有一个不为空的情况下,返回false
- 如果左孩子为空,或者左右孩子均为空,则将leaf置为true,后面遍历到的结点应该必须是叶结点。
public boolean tree(Node head){
if(head == null)
return true;
Queue<Node> queue = new LinkedList<Node>();
boolean leaf = false;
queue.offer(head);
while(!queue.isEmpty()){
head = queue.poll();
Node l = head.left;
Node r = head.right;
if((leaf && (l != null || r != null))
|| (l == null && r != null)){
return false;
}
if(l != null)
queue.offer(l);
if(r != null)
queue.offer(r);
if(l == null || r == null)
leaf = true;
}
return true;
}