这是二叉树的层次遍历算法:
#include <iostream>
#include<queue>
#include<algorithm>
using namespace std;
const int MaxSize=100;
typedef char ElemType;
typedef struct node{
ElemType data;
struct node *lchild;
struct node *rchild;
}BTNode;
//创建二叉树
void CreateBTree(BTNode *&b,ElemType *str){
BTNode *St[MaxSize],*p;
b=NULL;
int top=-1,k;
ElemType ch;
for(int i=0;(ch=str[i])!='\0';i++){
switch(ch){
case '(':St[++top]=p;k=1;break;
case ')':top--;break;
case ',':k=2;break;
default:
p=(BTNode*)malloc(sizeof(BTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(b==NULL)b=p;
else{
switch(k){
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
}
}
//二叉树的层次遍历算法
void LevelOrder(BTNode *b){
BTNode *p;
queue<BTNode*>qu;
qu.push(b);
while(!qu.empty()){
p=qu.front();
cout<<p->data;
qu.pop();
if(p->lchild!=NULL)qu.push(p->lchild);
if(p->rchild!=NULL)qu.push(p->rchild);
}
}
int main() {
ElemType str[]="A(B(D(,G)),C(E,F))";
BTNode* b;
CreateBTree(b,str);
LevelOrder(b);
return 0;
}
不妥之处,请多多指教。