题目描述:
思路描述:
此题目同样还是在层次遍历的基础上进行延申的题目.
因此我们的思路还是在层次遍历的基础上进行操作.同样需要声明一个队列存放元素,
具体思路:
首先将根节点入队,然后循环判断队列是否为空,如果不为空,就出队并且访问元素,并且将其子节点入队.一直循环上述操作直到队列为空.需要注意的是,(在这里要求的是将同一层的输出结果放在一个vetor里面,不同的放在不同的vector里面.)因此我们需要知道每一层的节点个数.
又因为我们是一层一层遍历,因此一个循环里面恰好涉及的是一个层的,因此我们在普通层次遍历的基础上添加一些代码即可.具体代码如下.
/**
* 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) {
//创建一个向量v,向量v中存放的元素也是向量.
vector<vector<int>> v;
vector<int> temp;
queue<TreeNode*> q;
if(root==NULL){
return v;
}
q.push(root);
while(!q.empty()){
//每访问一层元素,都要把上一层元素占据的空间进行清空操作,不然就会累计所有层的数据.得到错误的结果.
temp.clear();
int length = q.size();
for(int i=0;i<length;i++){
TreeNode *p = q.front();
q.pop();
if(p->left){
q.push(p->left);
}
if(p->right){
q.push(p->right);
}
temp.push_back(p->val);
}
v.push_back(temp);
}
return v;
}
};