判段是否一个完全二叉树

如何判段是否一个完全二叉树
宽度优先遍历
条件:
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;

    }

  

posted @ 2021-09-02 17:30  sherry001  阅读(35)  评论(0编辑  收藏  举报