두 갈래 나무, 뿌리 노드에서 잎 노드까지의 경로

루트 노드를 잎 노드로 내보내는 경로

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

루트 노드로 지정된 경로 내보내기

  
  
  
  
  1. #include <iostream>  
  2. #include <vector>  
  3. using namespace std;  
  4.   
  5. struct node   
  6. {  
  7.     int self; //    
  8.     node *left; //    
  9.     node *right; //    
  10.  };  
  11.   
  12. void PrintPath(node * root,vector<int> path,int length,int find) 
  13.     if (root) 
  14.     { 
  15.         path.push_back(root->self); 
  16.         //if (!root->left&&!root->right) 
  17.         if (root->self==find) 
  18.         { 
  19.             for (int i=0;i<path.size();i++) 
  20.             { 
  21.                 cout<<path[i]<<","
  22.             } 
  23.             cout<<endl; 
  24.             return;  
  25.         } 
  26.         else 
  27.         { 
  28.             PrintPath(root->left,path,length+1,find); 
  29.             PrintPath(root->right,path,length+1,find);   
  30.         } 
  31.          
  32.     } 
  33.  
  34.  
  35. void main()  
  36. {  
  37.      
  38.      
  39.     const int TREE_SIZE = 10;  
  40.     std::stack <node*> visited, unvisited;  
  41.     node nodes[TREE_SIZE];   
  42.       
  43.     forint i=0; i<TREE_SIZE; i++) //   
  44.     {  
  45.         nodes[i].self = i;  
  46.         int child = i*2+1;  
  47.         if( child<TREE_SIZE ) //Left child  
  48.             nodes[i].left = &nodes[child];  
  49.         else  
  50.             nodes[i].left = NULL;  
  51.         child++;  
  52.         if( child<TREE_SIZE ) //Right child      
  53.             nodes[i].right = &nodes[child];  
  54.         else  
  55.             nodes[i].right = NULL;  
  56.     }  
  57.      
  58.     vector<int> path; 
  59.     PrintPath(nodes,path,0,4); 
  60.     
  61. }  

좋은 웹페이지 즐겨찾기