题目描述
给定二叉树T(树深度不超过H<=10,深度从1开始,节点个数N<1024,节点编号1~N)的层序和中序遍历,输出T从左向右叶子节点以及树先序和后序遍历序列
输入描述
输入两行,分别代表层序和中序遍历结果,节点编号按单个空格分开
输出描述:
依次输出 从左向右叶子节点 ,先序, 后序 遍历 。 节点编号按空格分开
示例
输入
3 5 4 2 6 7 1 2 5 3 6 4 7 1
输出
2 6 1 3 5 2 4 6 7 1 2 5 6 1 7 4 3
思路
整道题的思路就是:如何通过层序和中序遍历结果重构二叉树。
中序遍历是:左根右,而层序遍历第一个节点必为根节点。这个时候就可以将树分为左子树和右子树。每次找层序遍历和中序遍历相同节点的时候,要注意中序遍历可以分左右,而层序不能,所以每次遍历都要从头到尾,所以要设计一个标志位(判断是否遍历过)。
代码
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int