需要使用队列
每出队一个元素,要入队该节点的左右孩子
具体思路见注释
/**
* 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<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;//存放结果
if (!root) return res;// 当根节点为空 直接返回
queue<TreeNode*> q;// 定义一个队列,每次向队列中放入一层的元素
q.push(root); // 先放入根节点
while (q.size()){
int len = q.size();// 先计算出队列的大小,即该层有多少元素(往res中需放入多少元素)
vector<int> level;// 用来存储该层的元素
for (int i = 0; i < len; ++i){
// 从队列头部取出一个元素 存入level
auto t = q.front();
q.pop();
level.push_back(t->val);
// 判断取出的元素是否有左右子树,若有,则存储队列q中
if (t->left) q.push(t->left);
if (t->right) q.push(t->right);
}
res.push_back(level);// 将该层的节点存入结果res中
}
return res;
}
};