『データ構造教程』(第5版)李春葆学習ノート(五)
1255 ワード
これはツリーの階層遍歴アルゴリズムです.
#include
#include
#include
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;
queuequ;
qu.push(b);
while(!qu.empty()){
p=qu.front();
cout<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;
}
不適切な点、よろしくお願いします.