题解二叉树遍历
Posted kcn999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解二叉树遍历相关的知识,希望对你有一定的参考价值。
题目描述
树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。
假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。
输入格式
共两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。
输出格式
一行,表示二叉树的先序序列。
输入样例
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;
以上是关于题解二叉树遍历的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 106. 从中序与后序遍历序列构造二叉树 c++/java详细题解