原题
题目描述
输入一个二叉树的先序串,输出以括号形式表示的而叉树。如果结点的子树为空,先序串的对应位置为空格符。
输入
第1行:先序串 (结点数≤26,以单个大写字母表示)
输出
第1行:二叉树的括号形式
样例输入
AB#C##D##
样例输出
A(B(#,C(#,#)),D(#,#))
注:空格用#表示
分析
样例分析图
这道题一看就需要用递归来做,可是千万不用被题目中疑似的数据范围坑了。题目中是说的“结点数≤26”,并不是说char数组只用开26个就可以了,所以就稍微开大那么一丢丢,为了防止再被坑,我开了300,其实大家可以不开那么多。
说多了都是泪~~
源代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[300];
int x;
void dfs(){
printf("%c",s[x]);
if(s[x]==' ') return;
printf("(");x++;dfs();
printf(",");x++;dfs();
printf(")");
}
int main()
{
fgets(s,300,stdin);
dfs();
}