429. N叉树的层序遍历(通过)
思路:层序遍历
效率:77.41%
程序代码:
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> result;
if (!root) return result;
vector<int> vec;
queue<Node*> qu;
qu.push(root);
while (!qu.empty()) {
vec.clear();
int n = qu.size();
for (int i = 0; i < n; i++) {
Node* tmp = qu.front();
vec.push_back(tmp->val);
qu.pop();
vector<Node*> a = tmp->children;
for (auto e : a)
qu.push(e);
}
result.push_back(vec);
}
return result;
}
};
简单,没什么需要注意的
107. 二叉树的层次遍历 II(通过)
思路:把上面的存储形式改成堆栈就可以了
效率:36.05%
程序代码:
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> result;
stack<vector<int>> st;
if (!root) return result;
vector<int> vec;
queue<TreeNode*> qu;
qu.push(root);
while (!qu.empty()) {
vec.clear();
int n = qu.size();
for (int i = 0; i < n; i++) {
TreeNode* tmp = qu.front();
vec.push_back(tmp->val);
qu.pop();
if(tmp->left)
qu.push(tmp->left);
if(tmp->right)
qu.push(tmp->right);
}
st.push(vec);
}
while (!st.empty()) {
result.push_back(st.top());
st.pop();
}
return result;
}
};
优秀代码参考:
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
queue<TreeNode *> queue;
queue.push(root);
vector<vector<int>> result;
if(!root)
return result;
while(!queue.empty()){
int n = queue.size();
vector<int> level;
for(int i =0;i<n;i++){
TreeNode* p=queue.front();
queue.pop();
if(p->left)
queue.push(p->left);
if(p->right)
queue.push(p->right);
level.push_back(p->val);
}
result.insert(result.begin(),level);
}
return result;
}
};
不使用堆栈而是直接使用向量的插入,更改程序再亲自实现一下~
效率果然是100%
补充知识点,对向量实现插入之后向量的指针如何变化呢??
测试程序:
int main() {
vector<int> a;
a.push_back(1);
while (1) {
int n;
cin >> n;
if (n == 0)
break;
vector<int>::iterator ptr=a.insert(a.begin(),n);
cout<<*a.begin()<<endl;
}
return 0;
}
经过测试发现返回的指针始终会指向向量的第一个元素