首先,完全二叉树的含义就是从左到右依次排满一行再排一行,各节点之间都是相邻的。
判断他是否是完全二叉树,
分情况判断:
① 一个节点有右子树,但是没有左子树那么他一定不是完全二叉树
② 一个节点的左右子树不满,那说明从他之后的节点都会有子节点,都是叶节点。
那么就利用层级遍历,遇到情况1直接返回false,遇到情况2然后进行标记,看后边节点是否有子节点 有的话直接返回false
public static boolean isCbtForSerch(TreeNodes tree){
Queue<TreeNodes> que =new LinkedList<>();
que.add(tree);
boolean isCaseTwo =false;
while(!que.isEmpty()){
tree =que.poll();
//undo 判断他是那种情况
// case one :only have right don t have left
if((tree.right!=null&&tree.left==null) ||
(isCaseTwo&&(tree.left!=null||tree.right!=null))){
return false;
}
if(tree.left!=null){
que.add(tree.left);
}
if(t