广度优先算法,用队列实现

    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.     for( int 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.  }