题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
解题方案:
本题的关键是对vector进行拆分,拆分之后,就能进行递归。。优点是代码简洁。。
我没有找到很好的拆分方式,只是重新的生成新的容器。注意,容器使用完毕之后,有进行释放内存。。因此,这种方式比较花费时间,效果不是很好。
/**
* 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) {
if(preorder.size() == 0)
return NULL;
TreeNode* root = new TreeNode(preorder[0]);
int loc = 0;
while(preorder[0] != inorder[loc]) loc ++;
vector<int> a(preorder.begin() + 1, preorder.begin() + 1 + loc);
vector<int> b(inorder.begin(), inorder.begin() + loc);
root->left = buildTree(a, b);
a.clear();
b.clear();
vector<int> c(preorder.begin() + 1 + loc, preorder.end());
vector<int> d(inorder.begin() + 1 + loc, inorder.end());
root->right = buildTree(c, d);
c.clear();
d.clear();
return root;
}
};