vector
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
/**
* 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;
TreeNode *root=new TreeNode(pre[0]);
int i;
for(i=0;i<vin.size();i++)
{
if(vin[i]==pre[0])
break;
}
root->left=reConstructBinaryTree(vector<int>(pre.begin()+1,pre.begin()+i+1),vector<int>(vin.begin(),vin.begin()+i));
root->right=reConstructBinaryTree(vector<int>(pre.begin()+i+1,pre.end()),vector<int>(vin.begin()+i+1,vin.end()));
return root;
}
};关于树的操作一般是递归
根据前序序列和中序序列找到根结点,再把左右两棵子树当作二叉树,递归找根节点
对于中序序列,根节点左边是它的左子树,右边是它的右子树,因此找到根节点后可以得知左右子树的中序序列,而对于前序序列,左子树结点总在右子树结点之前,因此也可以找到左右子树的前序序列
vector.end()指向最后一个元素的下一个位置
vector 有个构造函数
vector<int> vec1=vector<int>(vec2.bdgin(),vec2.end());</int></int>


阿里云工作强度 585人发布