2021/08/07
はじめに
N-aryが入力され,それを階層ごとに分け,出力する問題.
コード全文
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
if (!root) return vector<vector<int>>();
vector<vector<int>> levels;
queue<Node*> q;
q.push(root);
while(!q.empty()) {
vector<int> level;
int n = q.size();
while (n) {
level.push_back(q.front()->val);
for (const auto& child: q.front()->children) {
q.push(child);
}
q.pop();
n--;
}
levels.push_back(move(level));
}
return levels;
}
};
解説
関数
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
空の木に対する処理
if (!root) return vector<vector<int>>();
前準備
levels
には階層毎にわけたノードの集合体を格納する.
q
は,BFSに用いる.
vector<vector<int>> levels;
queue<Node*> q;
BFS
q
に初期値となるroot
を代入.
q.push(root);
while(!q.empty()) {
同階層のノードを集める
vector<int> level
には,同一階層のノードの値が格納される.
各階層ごとにq
にノードが入っているので,すべてlevel
にpush_back()
していく.
vector<int> level;
int n = q.size();
while (n) {
level.push_back(q.front()->val);
for (const auto& child: q.front()->children) {
q.push(child);
}
q.pop();
n--;
}
levels.push_back(move(level));
終了
}
return levels;
}
};