Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
题意:给出二叉树的前序遍历和中序遍历序列,要求重构二叉树。
这道题之前的博客有谈到,这里就不再仔细叙述了,直接上代码。
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(preorder.empty()||inorder.empty())
return NULL;
int preEnd=preorder.size()-1;
int inEnd=inorder.size()-1;
TreeNode *root=NULL;
root=build(preorder,inorder,0,preEnd,0,inEnd);
return root;
}
TreeNode *build(vector<int> &preorder, vector<int> &inorder,int preStart,int preEnd,int inStart,int inEnd)
{
int key=preorder[preStart];
int pos;
for(int i=inStart;i<=inEnd;i++)
{
if(inorder[i]==key)
{
pos=i;
break;
}
}
TreeNode *root=new TreeNode(key);
if(pos>inStart)
{
root->left=build(preorder,inorder,preStart+1,preStart+pos-inStart,inStart,pos-1);
}
if(inEnd>pos)
{
root->right=build(preorder,inorder,preStart+pos-inStart+1,preEnd,pos+1,inEnd);
}
return root;
}
};