思路:在树的层序遍历基础上,加一个内循环(将此次循环队列中的所有元素输出)。
/**
* 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;
queue<TreeNode*> q;
if(root==NULL)
return res;
else
q.push(root);
while(!q.empty()){
// 记录本次要出队的元素的个数
int len = q.size();
vector<int> temp_vec;
// 将当前队列中的元素都出队
for(int i=0; i<len; i++){
TreeNode* temp_node = q.front();
temp_vec.push_back(temp_node->val);
q.pop();
// 子节点入队之后影响的是下一次循环队列的长度len
if(temp_node->left) q.push(temp_node->left);
if(temp_node->right) q.push(temp_node->right);
}
res.push_back(temp_vec);
}
return res;
}
};