• 判别二叉树层序遍历递增


    #include<bits/stdc++.h> using namespace std;
     struct node { 
     int val; 
     int left; 
     int right;
     };
     int main() 
     { 	int n; 
        cin >> n; 
      
      
      while(n--) 
      {        
       int k; 
       cin >> k;    
       vector<node> tree(k);  
             
       vector<int> num(k, 0);  //用来找根节点      
      
       for(int i = 0;i < k;i++)
       {            
         cin >> tree[i].val >> tree[i].left >> tree[i].right; 
         if(tree[i].left != -1)     
            num[tree[i].left] = 1;       
         
         if(tree[i].right != -1)         
            num[tree[i].right] = 1;         
       }        
    
     int root = -1;       
     
       for(int i = 0;i < k;i++) 
       {            
       if(num[i] == 0)
       {                 
        root = i;              
        break;           
       }        
       }        
      
      vector<int> treeSum;   
           queue<node> q;   
          
           q.push(tree[root]);  //第几个是根节点   将其放进去   
      
       //层次遍历       
       while(!q.empty()) 
       {     
       int size = q.size();  
       int cnt = 0;       
    
        for(int i = 0;i < size;i++) //
        {     
          node head = q.front();   
          q.pop();          
          cnt += head.val;              
        
         if(head.left != -1)//不是叶节点
         {               
       	  q.push(tree[head.left]);                 
         }         
         
         if(head.right != -1)//不是叶节点
         {               
          q.push(tree[head.right]);                 
         }             
        }     
    
        treeSum.push_back(cnt);     //每一层放一次 
      }        
        bool ans = true;        
        for(int i = 0;i < treeSum.size() - 1;i++)
        {  
         if(treeSum[i+1] < treeSum[i])
         {         		
          ans = false;         	
          break;         	
         }         
       }         
     
          if(ans)      
        	cout << "YES" << endl;   
           else         
            cout << "NO" << endl;   
      } 
         return 0;
     }
    

     

    看,这样效果是一样的,只不过分层打印了

     

  • 相关阅读:
    插件集合
    postgis_LayerTransform
    react-高阶组件
    react-自定义事件
    Immutable 详解及 React 中实践
    babel-preset-env: a preset that configures Babel for you
    彻底解决Webpack打包慢的问题
    打包图片
    drag
    brush
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11488175.html
Copyright © 2020-2023  润新知