leetcode958二叉樹的徹底檢驗-java

最近項目剛剛檢查了,又有時間刷leetcode了,一道中等的樹1個小時才經過,過久不作了。。node

給定一個二叉樹,肯定它是不是一個徹底二叉樹spa

百度百科中對徹底二叉樹的定義以下:code

若設二叉樹的深度爲 h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層全部的結點都連續集中在最左邊,這就是徹底二叉樹。(注:第 h 層可能包含 1~ 2h 個節點。)blog

示例 1:隊列

輸入:[1,2,3,4,5,6]
輸出:true
解釋:最後一層前的每一層都是滿的(即,結點值爲 {1} 和 {2,3} 的兩層),且最後一層中的全部結點({4,5,6})都儘量地向左。

示例 2:leetcode

輸入:[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判斷,若是有一個節點的左右子樹都是空,後面還有左右子樹不都是空,那說明它不是徹底二叉樹get

相關文章
相關標籤/搜索