类别:BFS
难度:easy
题目描述
算法分析
广度优先搜索,使用队列辅助实现,具体实现与前面一篇博客102相同,只不过是在最后的时候,将结果进行反转而已(单纯的数组的反转)
代码实现
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> result;
if (root == NULL) return result;
queue<pair<TreeNode*, int> > que;
que.push(make_pair(root, 0));
int curlevel = -1;
int level = 0;
pair<TreeNode*, int> curNode;
vector<int> nodes;
// BFS ---- using queue
while (!que.empty()) {
curNode = que.front();
que.pop();
if (curNode.second != curlevel) {
curlevel = curNode.second;
if (nodes.size() != NULL) {
result.push_back(nodes);
}
// notice no it++
for (auto it = nodes.begin(); it != nodes.end();) {
nodes.erase(it);
}
}
nodes.push_back(curNode.first->val);
if (curNode.first->left != NULL) {
que.push(make_pair(curNode.first->left, curlevel + 1));
}
if (curNode.first->right != NULL) {
que.push(make_pair(curNode.first->right, curlevel + 1));
}
}
if (!nodes.empty()) result.push_back(nodes);
int n = result.size();
for (int i = 0; i < n/2; ++i) {
vector<int> temp = result[i];
result[i] = result[n - 1 - i];
result[n - 1 - i] = temp;
}
return result;
}
};