剑指offer:重建二叉树

来源:互联网 发布:leetcode python 编辑:程序博客网 时间:2024/06/13 06:30

题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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;    }};
0 0