Given preorder and inorder traversal of a tree, construct the binary tree.
从前序遍历结果和中序遍历结果中恢复出二叉树。
参考这篇文章Construct Binary Tree from Inorder and Postorder Traversal,思路基本相同,这里不多费口舌,代码如下。
AC code:
/**
* 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 *buildTree(vector<int> &preorder, vector<int> &inorder)
{
return helper(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1);
}
TreeNode *helper(vector<int> &preorder,int b1,int e1,vector<int> &inorder,int b2,int e2)
{
if(b2>e2)
return NULL;
TreeNode *root=new TreeNode(preorder[b1]);
int mid;
for(int i=b2;i<=e2;i++)
if(inorder[i]==preorder[b1])
{
mid=i;
break;
}
root->left=helper(preorder,b1+1,b1+mid-b2,inorder,b2,mid-1);
root->right=helper(preorder,b1+mid-b2+1,e1,inorder,mid+1,e2);
return root;
}
};