树的括号表示法:
先将根结点放入一对圆括号中,然后把它的子树按由左而右的顺序放入括号中,而对子树也采用同样方法处理:同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。例如下图可写成如下形式
(a(b,c,d,e))
a
/ | | \
b c d e
现在给定一个多叉树的括号表示法,要求你创建多叉树,并按层序输出。
eg:input:(a(b,c,d,e))
output:abcde
原创代码如下,使用栈存没个根节点
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <stack>
using namespace std;
char s[1000];
struct node
{
char data;
int snum;
node *son[20];
node(char d,int n):data(d),snum(n)
{
for(int i=0;i<20;i++)
son[i]=NULL;
}
};
void lay(node *root)
{
queue<node *> q;
q.push(root);
while(!q.empty())
{
node *temp=q.front();
q.pop();
cout<<temp->data;
for(int i=0;i<temp->snum;i++)
{
q.push(temp->son[i]);
}
}
}
int main()
{
scanf("%s",s);
int len=strlen(s);
stack<node *> st;
st.push(new node(s[1],0));
for(int i=3;i<len-2;i++)
{
char x=s[i];
if(x>='a'&&x<='z')
{
node *current=st.top();
current->son[current->snum++]=new node(x,0);
if(s[i+1]=='(')
st.push(current->son[current->snum-1]);
}
else if(x==')')
{
st.pop();
}
else
continue;
}
node *root=st.top();
lay(root);
}