思路和算法
广度优先搜索
思路和算法
我们可以用广度优先搜索解决这个问题。
我们可以想到最朴素的方法是用一个二元组 (node, level) 来表示状态,它表示某个节点和它所在的层数,每个新进队列的节点的 level 值都是父亲节点的 level 值加一。最后根据每个点的 level 对点进行分类,分类的时候我们可以利用哈希表,维护一个以 level 为键,对应节点值组成的数组为值,广度优先搜索结束以后按键 level 从小到大取出所有值,组成答案返回即可。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector <vector <int>> ret;
if (!root)
{
return ret;
}
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int size=q.size();
ret.push_back(vector<int>());
for(int i=1;i<=size;i++)//遍历队列
{
auto node=q.front();
q.pop();
ret.back().push_back(node->val);
if(node->left)
{
q.push(node->left);
}
if(node->right)
{
q.push(node->right);
}
}
}
return ret;
}
};