二叉樹之完全二叉樹判斷
分析:可以按照下面條件進行判斷
1. 採用按層遍歷的方式,依次遍歷所有結點
2. 如果當前結點有右孩子沒有左孩子,直接返回false
3. 如果當前結點有左孩子沒有右孩子,那之後的結點必須為葉子結點,否則返回false
4. 如果之前步驟不返回false,則返回true;
public class CheckCompletion {
public boolean chk(TreeNode root) {
// write code here
if(root==null){
return true;
}
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
boolean leaf=false;
TreeNode left=null;
TreeNode right=null;
while(!queue.isEmpty()){
root=queue.poll();
left=root.left;
right=root.right;
// 如果之前層遍歷的結點沒有右孩子,且當前的結點有左或右孩子,直接返回false
// 如果當前結點有右孩子卻沒有左孩子,直接返回false
if(leaf&&(left!=null||right!=null)||(left==null&&right!=null)){
return false;
}
if(left!=null){
queue.offer(left);
}
if(right!=null){
queue.offer(right);
}else{
//左右節點不全有是葉子結點
leaf=true;
}
}
return true;
}
}