題目描述:
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。
注意:
你可以假設樹中沒有重複的元素。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3
/ \
9 20
/ \
15 7
代碼:
/**
* Definition for a binary tree node.
* 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 CreateTree(0,preorder.size()-1,0,inorder.size(),preorder,inorder);
}
TreeNode* CreateTree(int pre_begin,int pre_end,int in_begin,int in_end,vector<int>&pre,vector<int>&ino)
{
if(in_begin>in_end||pre_begin>pre_end) return NULL;
TreeNode *root=new TreeNode(pre[pre_begin]);
int count=in_begin;
while(count<=in_end&&pre[pre_begin]!=ino[count])count++;
root->left=CreateTree(pre_begin+1,count-in_begin+pre_begin,in_begin,count-1,pre,ino);
root->right=CreateTree(count-in_begin+pre_begin+1,pre_end,count+1,in_end,pre,ino);
return root;
}
};