/*
* 这题考察的就是层序遍历
* 总体思路:
* 1. 定义一个队列q,存储每一层的节点,并入队root根节点;
* 2. 定义一个二维数组,存储每一层的每一个节点的值
* 3. 只要队列q不为空,则继续遍历二叉树。
* 4. 定义一个vector eachRow,存储每一行的节点值,然后push_back到allRow
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
// 定义一个队列q,存储每一层的节点,并入队root根节点;
deque<TreeNode*> q;
if (root != nullptr) {
q.push_back(root);
}
// 定义一个二维数组,存储每一层的每一个节点的值
vector<vector<int>> allRow;
// 只要队列q不为空,则继续遍历二叉树。
while (!q.empty()) {
// 定义一个vector eachRow,存储每一行的节点值,然后push_back到allRow
vector<int> eachRow;
// 因为队列里面寸的是每一行的节点,所以遍历q.size()
int size = q.size();
for (int i = 0; i < size; i++) {
// 获取第一个节点地址,并出队
TreeNode* tmp = q.front();
q.pop_front();
// 存到eachRow里面
eachRow.push_back(tmp->val);
// 对刚刚出队的节点,将其下一行节点入队
if (tmp->left != nullptr) {
q.push_back(tmp->left);
}
if (tmp->right != nullptr) {
q.push_back(tmp->right);
}
}
allRow.push_back(eachRow);
}
return allRow;
}
};
层序遍历类似题目:一天解决5题不是梦