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>