判断一棵二叉树是否是完全二叉树?

  完全二叉树:二叉树每层从左到右依次排满

  那么抽取一下什么情况不满足呢?

  (1)当右子树不为空而左子树为空时

  (2)当叶子状态时,假如叶子节点的左子树或者右子树还不为空,则表明不是完全二叉树

  所以我们需要区分一下叶子状态的界限是某棵子树的左子树为空,进入叶子状态,其实右子树为空,也同样进入到叶子状态,但是由于情况1已经将左子树为空处理过了,那么我们只需判断右子树为空即可进入到叶子状态。

  

/**
     * 问题描述:判断是否是完全二叉树
     * 1.满二叉树
     * 2.从左到右排满二叉树
     */
    public boolean isFullTree(Node node){
        if (node==null)
            return false;
        Queue<Node> queue=new LinkedList();
        queue.add(node);
        boolean isleaf=false;   //临界状态判断
        while (!queue.isEmpty()){
            Node cur=queue.poll();
            if ( (isleaf && (cur.left!=null || cur.right!=null))
                    || (cur.left==null && cur.right!=null) ){
                return false;
            }
            if (cur.left!=null)
                queue.add(cur.left);
            if (cur.right!=null)
                queue.add(cur.right);
            else    //进入叶子状态
                isleaf=true;
        }
        return true;
    }

 

posted @ 2017-11-16 20:26  还想着呢  阅读(119)  评论(0)    收藏  举报