学习:
根据动态数组a创建动态数组b,对左右两边取值范围的测试:
vector<int>b(a.begin(), a.end());
// a.end()为第4个位置(从第0个位置开始数)// 取左不取右
// 左边不可以出现a.end()及往上。例外,(a.end(),a.end())是可以的。
// 右边不可以出现a.end()+1及往上。
// 左边必须<=右边
模板的:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param preOrder int整型vector
* @param vinOrder int整型vector
* @return TreeNode类
*/
TreeNode* reConstructBinaryTree(vector<int>& preOrder, vector<int>& vinOrder) {
// write code here
int n = preOrder.size();
if (n == 0)
return NULL;
TreeNode* root = new TreeNode(preOrder[0]);
for (int i = 0; i < n; i++) {
if (preOrder[0] == vinOrder[i]) {
vector<int> leftpre (preOrder.begin() + 1, preOrder.begin() + i + 1); // 注意初始化
vector<int> leftvin (vinOrder.begin(), vinOrder.begin() + i);
root -> left = reConstructBinaryTree(leftpre, leftvin);
vector<int> rightpre (preOrder.begin() + 1 + i, preOrder.end());
vector<int> rightvin (vinOrder.begin() + 1 + i, vinOrder.end());
root -> right = reConstructBinaryTree(rightpre, rightvin);
break; //容易忘记
}
}
return root;
}
};