完成二叉树的判断

来源:互联网 发布:苹果微信网络出错1202 编辑:程序博客网 时间:2024/06/06 00:22

/*

题目:

有一棵二叉树,请设计一个算法判断它是否是完全二叉树。

给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。

*/


  public boolean chk(TreeNode root) {
       /*
       解题思路:采用层次遍历,在遍历过程成考虑3种情况,
       1节点的左右孩子不为空,则直接将该节点的左右孩子添加到队列
       2节点的左孩子不为空,右孩子为空的,则将左孩子装入队列,并且循环判断队列中的所以节点,
         如果队列中的节点存在左孩子或者右孩子则返回false,退出该循环
       3节点的左孩子为空,右孩子不为空,则返回false
       */
        if(root==null){
            return true;
        }
        boolean flage=true;
        LinkedList<TreeNode> queue=new LinkedList<TreeNode>();
        queue.add(root);
        while(queue.size()!=0){
            TreeNode temp=queue.remove();
            if(temp.left!=null&&temp.right!=null){//节点左右子树均不为空的情况
                queue.add(temp.left);
                queue.add(temp.right);
            }
            if(temp.left!=null&&temp.right==null){//节点左子树不为空,右子树为空的情况
                //将该节点装入队列
                queue.add(temp.left);
               //判断队列中的所有节点是否有左右孩子,如果有则返回false
                while(queue.size()!=0){
                    TreeNode s=queue.remove();
                    if(s.left!=null||s.right!=null){
                        flage=false;
                        break;
                    }
                }
            }
            if(temp.left==null&&temp.right!=null){//如果存在左子树为空,右子树不为空的情况,则为false
                flage=false;
                break;
            }
        }//while
        return flage;
    }

原创粉丝点击