広さ優先


広さ優先アルゴリズム、キューで実現

  
  
  
  
  1. #include <iostream> 
  2. #include <stdio.h> 
  3. #include <queue> 
  4. using namespace std; 
  5.  
  6. struct node  
  7.     int self; //   
  8.     node *left; //   
  9.     node *right; //   
  10.  }; 
  11.  
  12. void main() 
  13.     const int TREE_SIZE = 9; 
  14.     std::queue <node*> visited, unvisited; 
  15.     node nodes[TREE_SIZE];  
  16.     node* current; 
  17.     forint i=0; i<TREE_SIZE; i++) //  
  18.     { 
  19.         nodes[i].self = i; 
  20.         int child = i*2+1; 
  21.         if( child<TREE_SIZE ) //Left child 
  22.             nodes[i].left = &nodes[child]; 
  23.         else 
  24.             nodes[i].left = NULL; 
  25.         child++; 
  26.         if( child<TREE_SIZE ) //Right child     
  27.             nodes[i].right = &nodes[child]; 
  28.         else 
  29.             nodes[i].right = NULL; 
  30.     }            
  31.      
  32.     unvisited.push(&nodes[0]); // 0 UNVISITED stack 
  33.      
  34.     while(!unvisited.empty()) // UNVISITED  
  35.          
  36.     { 
  37.         current=(unvisited.front()); //  
  38.         unvisited.pop();  
  39.          
  40.         if(current->left!=NULL)  
  41.             unvisited.push(current->left); 
  42.  
  43.         if(current->right!=NULL)  
  44.             unvisited.push(current->right);   
  45.          
  46.      
  47.          
  48.         visited.push(current); 
  49.          
  50.         cout<<current->self<<endl; 
  51.         //if (current->self==7) return; 
  52.          
  53.  }