重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
root->left=reConstructBinaryTree(preleft,inleft); root->right=reConstructBinaryTree(preright,inright); return root; } };/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) { if (pre.empty() || in.empty() || pre.size()!=in.size()){ return NULL; } TreeNode* root=new TreeNode(pre[0]); int len=in.size(); int i,k=-1; vector<int> preleft,preright,inleft,inright; for(i=0;i<len;i++) { if(pre[0]==in[i]) { k=i; break; } } if(k==-1) return NULL; for(i=0;i<len;i++) { if(i<k) inleft.push_back(in[i]); if(i>k) inright.push_back(in[i]); } k=inleft.size()+1; for(i=1;i<pre.size();i++) if(i<k) preleft.push_back(pre[i]); else preright.push_back(pre[i]);