剑指offer:重建二叉树
2017-04-24 19:32
435 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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; } };
相关文章推荐
- 重建二叉树(剑指offer6、编程之美3.9)
- (C++)剑指offer-4:重建二叉树(理解不透彻)
- 剑指offer——重建二叉树
- 剑指offer-重建二叉树
- 剑指offer【7】 重建二叉树
- 剑指offer面试题6——重建二叉树(递归)
- 【剑指offer】4.重建二叉树
- 剑指offer-二叉树的重建
- [牛客网,剑指offer,python] 重建二叉树
- 【剑指offer】面试题6:重建二叉树
- 剑指offer——题目1385:重建二叉树
- 【剑指offer】重建二叉树
- 【剑指offer-Java版】06重建二叉树
- 【剑指Offer】重建二叉树 解题报告(Java & Python)
- 剑指offer题6_重建二叉树
- 【剑指offer】题目1385:重建二叉树
- 剑指offer面试题6 重建二叉树(java)
- 剑指offer-重建二叉树 由前序和中序遍历序列建树
- 剑指Offer——重建二叉树2
- [牛客网,剑指offer,python] 重建二叉树