题目:重建二叉树
题目描述
思路:
前序第一个元素是根节点,紧跟着左右两个子树节点的元素;中序先左子树节点元素,然后根节点,租后右子树节点元素。在中序遍历序列中找到根节点元素,就可得到左右子树节点元素的个数,从而得到前序遍历序列和中序遍历序列中的左右子树部分;利用递归法,课重建二叉树。
错误代码:
/**
* 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* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
if(pre.size()==0) return NULL;
//找postion
int i;
for(i=0;i<pre.size()&&vin[i]!=pre[0];i++){}
TreeNode* root=new TreeNode(pre[0]);
vector<int> pre_left(pre.begin()+1,pre.begin()+i+1);
vector<int> in_left(vin.begin(),vin.begin()+i);
root->left=reConstructBinaryTree(pre_left,in_left);
vector<int> pre_right(pre.begin()+i+1,pre.end());
vector<int> vin_right(vin.begin()+i+1,vin.end());
root->right=reConstructBinaryTree(pre_right,vin_right);
return root;
}
};
错误部分:直接拷贝得到pre_left等vector容器,正确答案是利用push_back操作重新建立pre_left;想问出错原因。