二叉树遍历
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 9 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
树和二叉树基本上都有先序、中序、后序,层序遍历等遍历顺序,给定中序和其他一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和层序遍历的字符串,求该树的先序遍历字符串。
Input
输入有多组数据,对于输入每组数据有两行,每行是由字母组成的字符串(一行的每个字符都是唯一的,长度不超过20),分别表示二叉树的中序遍历和层序遍历的序列。
Output
对于每组输入输出二叉树的先序序列。
Sample Input
DBEAC ABCDE
Sample Output
ABDEC
思路分析:层序是的第一个为根节点,是根据根节点来排的。中序是先排左节点在排根节点然后排右节点。
代码:#include<iostream> #include<cstdio> #include<cstring> using namespace std; int map[300]; char z[300],c[300]; int l; void solve(int l,int r ) { int i; if(l>r) return; int k=0x7fffff,where; for(i=l;i<=r;i++) { if(map[z[i]]<k) { k=map[z[i]]; where=i; } } putchar(z[where]); solve(l,where-1); solve(where+1,r); } int main() { int i; while(scanf("%s%s",&z,&c)!=EOF) { int l=strlen(z); for(i=0;i<l;i++) map[c[i]]=i; solve(0,l-1); putchar('\n'); } return 0; }