首先,选择一个合适的数据结构存储多叉树,我使用了“左孩子右兄弟”的方法,使用二叉树来存储多叉树,便于实现和遍历。

其次,宽度优先搜索时:

1.用队列(先进先出)保存遍历路径。

2.搜索顺序:对节点A,先访问节点的左节点(第一个孩子节点),从该左节点开始一直向右遍历直到最右叶子节点(所有兄弟节点),此时遍历完A的所有直接孩子。遍历的同时,节点入队列。

3.遍历完A的孩子后,取队列中的下一个节点,继续遍历其孩子节点。直到队列为空。

代码用C++实现,省略了类Queue, Node的实现

 
  
  1. class Tree  
  2. {  
  3. public:  
  4.     Node *root;  
  5.     Tree()  
  6.     {  
  7.         root=NULL;  
  8.     }  
  9.  
  10.     void BFS()  
  11.     {  
  12.         Queue *queue=new Queue();  
  13.         Node *p=root;  
  14.         if(p == NULL)  
  15.             return;  
  16.         //首先打印根节点  
  17.         printf("%d\t",p->data);  
  18.         //第一个孩子节点  
  19.         p = p->left;  
  20.         while(p != NULL)  
  21.         {  
  22.             //p打印,并入栈  
  23.             queue->push(p);  
  24.             printf("%d\t",p->data);  
  25.             //如果有右孩子,一直入栈  
  26.             p=p->right;  
  27.             while(p!= NULL)  
  28.             {  
  29.                 queue->push(p);  
  30.                 printf("%d\t",p->data);  
  31.                 p=p->right;  
  32.             }  
  33.             p=(Node *)queue->getFront();  
  34.             if(p == NULL)  
  35.                 break;  
  36.             //从队列中取出下一个节点,访问它的所有孩子节点  
  37.             queue->pop();  
  38.             p=p->left;  
  39.         }  
  40.     }  
  41. };