我们都知道用“左儿子右兄弟”的方法可以将一棵一般的树转换为二叉树,如:
0 0 / | \ / 1 2 3 ===> 1 / \ \ 4 5 2 / \ 4 3 \ 5现在请你将一些一般的树用这种方法转换为二叉树,并输出转换前和转换后树的高度。
输入 输入是一个由“u”和“d”组成的字符串,表示一棵树的深度优先搜索信息。比如,dudduduudu可以用来表示上文中的左树,因为搜索过程为:0 Down to 1 Up to 0 Down to 2 Down to 4 Up to 2 Down to 5 Up to 2 Up to 0 Down to 3 Up to 0。 你可以认为每棵树的结点数至少为2,并且不超过10000。 输出 按如下格式输出转换前和转换后树的高度: h1 => h2 其中,h1是转换前树的高度,h2是转换后树的高度。 样例输入 dudduduudu 样例输出 2 => 4 查看 提交 统计 提示 提问 代码: #include<cstdio> #include<cstring> #define MAX(a,b) ((a)>(b)?(a):(b)) const int N = 100100; char s[N]; int res1=-1,res2 = -1,i=0; void dfs(int &i, int dep1,int dep2){ res1 = MAX(res1,dep1); res2 = MAX(res2,dep2); int cnt = 1; while(s[i]){ if(s[i] == 'd') dfs(++i,dep1+1,dep2+cnt),cnt++; else{ i++; return; } } } int main(){ scanf("%s",s); dfs(i,0,0); printf("%d => %d\n",res1,res2); return 0; }