• leetcode958二叉树的完全检验-java


    最近项目刚刚检查了,又有时间刷leetcode了,一道中等的树1个小时才通过,太久不做了。。

    给定一个二叉树,确定它是否是一个完全二叉树

    百度百科中对完全二叉树的定义如下:

    若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)

    示例 1:

    输入:[1,2,3,4,5,6]
    输出:true
    解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。
    

    示例 2:

    输入:[1,2,3,4,5,null,7]
    输出:false
    解释:值为 7 的结点没有尽可能靠向左侧。
    
      public boolean isCompleteTree(TreeNode root) {
            Queue<TreeNode> queue=new LinkedList<TreeNode>();
            queue.offer(root);
            int n=1;
            boolean re=true;
            List<Integer>list=new ArrayList<Integer>();
            int tag=0;
            while(!queue.isEmpty()){
                for(int i=0;i<queue.size();i++){
                    TreeNode node=queue.poll();
                   if(node==null){
                       if(!queue.isEmpty()||queue.poll()!=null){
                        re=false;
                       break;
                       }
                   }
                   else{
                    if(node.left!=null||node.right!=null){
                         if(tag==1){
                        re=false;
                        break;
                        }   
                        queue.offer(node.left);
                        queue.offer(node.right);
                    }
                    else{
                          
                           tag=1;
                       }
                  }
                    
                }
                if(re==false)
                    break;
                
                
            }
       
            return re;
        }

    就是层次遍历,每个结点如果不是空,并且左右节点都不空就插入队列中,然后这样如果在层次遍历的时候发现有空的节点,并且队列里还有不为空的元素的话,说明不是二叉树。第一次提交的时候忽略了(1,2,3,null,null,7,8)这样的树,(其实想到会有这种情况,但是先试着提交再改代码)。然后我通过tag判断,如果有一个节点的左右子树都是空,后面还有左右子树不都是空,那说明它不是完全二叉树

  • 相关阅读:
    ASM ClassReader failed to parse class file- probably due to a new Java class file version that isn't supported yet问题
    Git配置工作
    Git多人协作
    Git分支合并
    网络收藏夹
    莫道桑榆晚,为霞尚满天
    2021幼升小
    2020年07月28日10:36:36
    JAVA中如果用BigDecimal做除法
    mybatis
  • 原文地址:https://www.cnblogs.com/HannahLihui/p/10144753.html
Copyright © 2020-2023  润新知