判段是否一个完全二叉树
如何判段是否一个完全二叉树
宽度优先遍历
条件:
1、不能有右无左,
2、遇到孩子不双全的节点,接下来遇到的节点必是叶子节点
public static boolean isCBT(TreeNode head){ if(head==null){ return true; } Queue<TreeNode> queue=new LinkedList<>(); queue.add(head); //是否遇到孩子不双全的节点 boolean isMeet=false; while (!queue.isEmpty()){ TreeNode cur=queue.poll(); TreeNode l=cur.left; TreeNode r=cur.right; //遇到孩子不双全的节点,接下来遇到的节点必是叶子节点 if(isMeet&&!(l==null && r==null)){ return false; } //不能有右无左 if(r!=null&&l==null){ return false; } if(l!=null){ queue.add(l); } if(r!=null){ queue.add(r); } if(l==null||r==null){ //遇到了孩子不双全的节点 isMeet=true; } } return true; }