题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:
思路类似由二叉树的中序和后序序列构造二叉树:http://blog.csdn.net/u012243115/article/details/42141713 。
代码:
/**
* 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)
{
if(preorder.empty() || inorder.empty())
return NULL;
return createTree(preorder, 0 , preorder.size()-1 , inorder , 0 , inorder.size()-1);
}
TreeNode *createTree(vector<int> &preorder,int preBeg,int preEnd, vector<int> &inorder,int inBeg,int inEnd)
{
if(preBeg > preEnd)
return NULL;
TreeNode *root = new TreeNode(preorder[preBeg]);
int i = inBeg;
while(i < inEnd && inorder[i] != preorder[preBeg])
{
i++;
}
int len = i - inBeg;
root->left = createTree(preorder,preBeg+1,preBeg+len,inorder,inBeg,i-1);
root->right = createTree(preorder,preBeg+len+1,preEnd,inorder,i+1,inEnd);
return root;
}
};