标签:按层遍历 pre img ret void spl std color cout
树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。
假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。
共两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。
一行,表示二叉树的先序序列。
DBEAC
ABCDE
ABDEC
根据按层遍历,我们可以知道某个结点的深度,我们又可以在中序遍历的序列中找到当前点所匹配的位置,又可以找到当前结点的左右子树,这样遍历下去即可。
#include <iostream> #include <string> using namespace std; string a, b; void func(int, int, int); int main() { cin >> a >> b; func(0, a.size() - 1, 0); return 0; } void func(int lt_a, int rt_a, int obj) { cout << b[obj]; int pos = a.find(b[obj]); //bool op = 0; for(register int i = obj + 1; i < b.size(); i++) { bool is_Break = 0; for(register int j = lt_a; j < pos; j++) { if(a[j] == b[i]) { //if(!op) op = 1, cout << ‘(‘; func(lt_a, pos - 1, i); is_Break = 1; break; } } if(is_Break) break; } for(register int i = obj + 1; i < b.size(); i++) { bool is_Break = 0; for(register int j = pos + 1; j <= rt_a; j++) { if(a[j] == b[i]) { //if(!op) op = 1, cout << ‘(‘; is_Break = 1; func(pos + 1, rt_a, i); break; } } if(is_Break) break; } //if(op) cout << ‘)‘; return; }
标签:按层遍历 pre img ret void spl std color cout
原文地址:https://www.cnblogs.com/kcn999/p/10988836.html