从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
二叉树层层遍历需利用队列先进先出的特性,使用队列对每一层的节点从左到右按顺序储存,就能通过队列的弹出一层层遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> levelOrder(TreeNode* root) { //返回值是向量累类型
vector<int> res; //定义一个返回类型
if(root == NULL) return res;
queue <TreeNode*> q; //利用队列的先进先出,对二叉树进行一层层遍历
q.push(root); //队列存的是每一个节点的二叉树指针,通过操作指针来遍历
while(q.size()){
TreeNode* node = q.front(); //此节点用来去除二叉树的值
q.pop();
res.push_back(node->val); //循环一次只存一个,只存节点
if(node->left!=NULL)
q.push(node->left);
if(node->right!=NULL)
q.push(node->right);
}
return res;
}
};
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
重点:
1.二维向量的使用!!
2.给结构体开辟空间并将空间的地址给结构体指针变量
3.二维数组的遍历
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
// TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector <vector <int>> res;
if (!root) return res;
queue<TreeNode*> q;
q.push(root);