题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
class Solution {
public:
struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in)
{
int len=in.size();
vector<int> pre_left,pre_right,in_left,in_right;
if(len==0) return NULL;
TreeNode* Head=new TreeNode(pre[0]) ;
int gen=0;
while(pre[0]!=in[gen])
gen++;
for(int i=0;i<gen;i++)
{
pre_left.push_back(pre[i+1]);
in_left.push_back(in[i]);
}
for(int i=gen+1;i<len;i++)//这里因为根节点已经提了,所以一定要把根节点筛出来
{
pre_right.push_back(pre[i]);
in_right.push_back(in[i]);
}
Head->left=reConstructBinaryTree(pre_left,in_left) ;
Head->right=reConstructBinaryTree(pre_right,in_right) ;
return Head;
}
};