import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ public boolean isCompleteTree (TreeNode root) { // write code here //我们需要注意到一点,按照从左到右层序遍历的效果,如果是完全二叉树,那么#后面不会再有值x //即:只有xxx###才是完全二叉树,xx#x,xxx##xx#x,只要是#后还要x,都不是完全二叉树 //当第一次碰到空节点时,将firstnull置为true,并跳过本次循环 //如果后面又碰到了非空的节点,则说明不是完全二叉树 if(root==null) return true; Queue<TreeNode> q = new LinkedList<>(); boolean firstnull=false; q.add(root); while(!q.isEmpty()) { TreeNode cur=q.poll(); if(cur==null) { firstnull=true; continue; } else//说明当前节点不是空节点 { if(firstnull==true) return false;//当前节点不是空节点,但是之前又见过了空节点,不是完全二叉树 q.add(cur.left); q.add(cur.right); } } return true; } }