资料:
1. 将一个容器中的内容追加到另一个容器的后面:
c++ 两个vector之间相互赋值,或在一个后面追加另一个_两个vector赋值-CSDN博客
2. 模板用到unordered_map(无序map容器,和python的字典很像)
【精选】unordered_map详解_愚蠢的土拨鼠。的博客-CSDN博客
自己写的:
如果vector的赋值操作时间复杂度为线性级别O(n),那么总的时间复杂度应该是O(n^2),比o(n)大。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求二叉树的右视图
* @param preOrder int整型vector 先序遍历
* @param inOrder int整型vector 中序遍历
* @return int整型vector
*/
vector<int> solve(vector<int>& preOrder, vector<int>& inOrder) {
// write code here
vector<int> ans;
int n = preOrder.size();
if(n == 0)
return ans;
for(int i = 0; i < n; i ++){
if(preOrder[0] == inOrder[i]){
ans.push_back(preOrder[0]);
vector<int> leftpre (preOrder.begin() + 1, preOrder.begin() + i + 1);
vector<int> leftvin (inOrder.begin(), inOrder.begin() + i);
vector<int> leftOrder = solve(leftpre, leftvin);
vector<int> rightpre (preOrder.begin() + 1 + i, preOrder.end());
vector<int> rightvin (inOrder.begin() + 1 + i, inOrder.end());
vector<int> rightOrder = solve(rightpre, rightvin);
ans.insert(ans.end(), rightOrder.begin(), rightOrder.end());
if(rightOrder.size() < leftOrder.size())
ans.insert(ans.end(), leftOrder.begin()+rightOrder.size(), leftOrder.end());
break;
}
}
return ans;
}
};
模板的:
1根据前序遍历和中序遍历来建树。
2深度优先搜素:使用的是栈stack(层序遍历使用的是队列queue),且先访问结点的右子节点。