从前序与中序遍历序列构造二叉树
题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
解题思路:这一题和之前做的给出后序和中序序列,生成二叉树,思路一样,就此每次都给出下一次的前序和中序的相应左子树和右子树的序列,递归完成即可。
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(inorder.size()==0||preorder.size()==0)return NULL;
int size=inorder.size();
TreeNode* root=new TreeNode(preorder[0]);
vector<int>pre_left,pre_right,in_left,in_right;
int root_index;
for(int i=0;i<inorder.size();i++){
if(inorder[i]==preorder[0]){
root_index=i;
break;
}
}
for(int i=0;i<root_index;i++){
pre_left.push_back(preorder[i+1]);
in_left.push_back(inorder[i]);
}
for(int i=root_index+1;i<size;i++){
pre_right.push_back(preorder[i]);
in_right.push_back(inorder[i]);
}
root->left=buildTree(pre_left,in_left);
root->right=buildTree(pre_right,in_right);
return root;
}
};