剑指offer-从上到下打印二叉树C++实现
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct TreeNode {
int val;
// 左节点
struct TreeNode *left;
// 右节点
struct TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
vector<int> levelOrder(TreeNode *root) {
// 根节点为空,返回空数组
if (!root)return {};
// 队尾插入
queue_tree.push(root);
while (!queue_tree.empty()) {
// 队首取出
TreeNode *node = queue_tree.front();
// 先进先出,队首删除
queue_tree.pop();
// 数组尾部插入
level_tree.emplace_back(node->val);
// 有左节点,队列添加左节点
if (node->left) {
queue_tree.push(node->left);
}
// 有右节点,队列添加右节点
if (node->right) {
queue_tree.push(node->right);
}
}
return level_tree;
}
private:
vector<int> level_tree;
queue<TreeNode *> queue_tree;
};
思路:
这题考察的是BFS的写法,总体思路就是使用队列来顺序存储二叉树的节点,然后利用先进先出原则存到vector中即可。
时间复杂度O(N),空间复杂度O(N)