您的位置:首页 > Web前端

剑指offer:重建二叉树

2017-04-24 19:32 435 查看
题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

Definition for binary tree
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
int len=vin.size();
if(len<=0)return NULL;
if(len==1)
{
TreeNode* root=new TreeNode(pre[0]);
return root;
}
vector<int> left;
vector<int> right;
vector<int> preNew=pre;
TreeNode *Root=new TreeNode(pre[0]);
for(int j=0;j<len;j++)
if(vin[j]==pre[0])
{
preNew.erase(preNew.begin());
for(int i=0;i<j;i++)
left.push_back(vin[i]);//前部分中序遍历的顺序表
for(int i=j+1;i<len;i++)
right.push_back(vin[i]);//后部分中序遍历的顺序表
Root->left=reConstructBinaryTree(preNew, left);
preNew.erase(preNew.begin(),preNew.begin()+j);//将先序遍历的顺序表截为本次递归的先序顺序
Root->right=reConstructBinaryTree(preNew,right);
break;
}
return Root;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树