设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。
#include<iostream>
//#include<stdio.h>
using namespace std;
#define M 3
typedef struct node{
char val;
struct node* subTree[M];
}NODE;
char buf[255],*str = buf;
NODE * d = NULL;
NODE * makeTree()
{
int k;
NODE *s;
s = new NODE();
s->val = *str++;
for(k=0;k<M;k++)
{
s->subTree[k] = NULL;
}
if(*str=='(')
{
k = 0;
do{
str++;
s->subTree[k] = makeTree();
if(*str==')'){
str++;
break;
}
k = k + 1;
}while(k<M);
}
return s;
}
void walkTree(NODE * t)
{
if(t!=NULL){
cout<<t->val;
if(t->subTree[0]==NULL)
return ;
cout <<"(";
for(int i=0;i<M;i++){
walkTree(t->subTree[i]);
if(i!=M-1&&t->subTree[i+1]!=NULL)
cout << ',';
}
cout << ')';
}
}
int main()
{
cout << "Enter exp: ";
cin >> str;
d = makeTree();
walkTree(d);
cout << endl;
return 0;
}