考研的时候感觉二叉树,队列什么的数据结构都很熟悉,现在都生疏了,正好解一个二叉树的简单算法;
层次遍历就用BFS广度优先的思想,需要使用到队列的数据结构,这里偷懒用了C++的STL queue;
还有一点是,题目要求的输出是每一层的元素一个vector ;
那么每一次循环时,都记录当前队列的长度,因为当前队列存在的元素属于一层,要把它们全部出队并插入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) {
vector<vector<int>> res;
if(root==NULL)
//若为空树直接返回
return res;
queue<TreeNode*> q;
q.push(root);
while(q.size()!=0)
{
int len = q.size();
//将当前队列长度记录下来,len就是该层的元素个数
vector<int> tmp;
while(len!=0)
//这个循环要把一层的所有元素出队
{
TreeNode* element = q.front();
tmp.push_back(element->val);
q.pop();
len--;
if(element->left!=NULL)
q.push(element->left);
if(element->right!=NULL)
q.push(element->right);
}
res.push_back(tmp);
}
return res;
}
};