二叉樹按層遍歷
判斷條件:結點的左右孩子只有4種情況
其中的三種情況有特例
條件1.結點有右孩子,沒有左孩子,直接返回false
條件2.結點左右孩子不全(有左沒右,左右都沒有),則后面遇到的所有結點,都必須是葉節點
只要不違反1.2的,就是完全二叉樹
public class IsCBTTree { public static boolean isCBTTree(Tree tree){ if(tree == null) return true; //是否開啟葉子結點,之后如果遇到不是葉子結點時,就不是完全二叉樹 boolean isLeaf = false; Queue<Tree> queue = new LinkedList<>(); queue.offer(tree); while(!queue.isEmpty()){ tree = queue.poll(); Tree l = tree.left; Tree r = tree.right; if((l == null && r != null) || (isLeaf && (l != null || r != null))){ return false; } if(l != null){ queue.offer( l ); } if(r != null){ queue.offer( r ); } if(l == null || r == null){ isLeaf = true; } } return true; } }