ys memos

Blog

leetcode429 N-ary Tree Level Order Traversalの解説


leetcode

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;

qに初期値となるrootを代入.

    q.push(root);
    while(!q.empty()) {

vector<int> levelには,同一階層のノードの値が格納される.

各階層ごとにqにノードが入っているので,すべてlevelpush_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;
  }
};


関連タグを探す