문제 링크

요약

  • BFS 로 풀면 된다.

최종

  • 그냥 bfs 돌리면 된다.
/*
// Definition for a Node.
class Node {
public:
	int val;
	vector<Node*> children;
 
	Node() {}
 
	Node(int _val) {
		val = _val;
	}
 
	Node(int _val, vector<Node*> _children) {
		val = _val;
		children = _children;
	}
};
*/
 
#define PACK(level, val) ((level) << 16 | (val))
#define UNPACK_LEVEL(pack) (((pack) >> 16) & 0xFFFF)
#define UNPACK_VAL(pack) ((pack) & 0xFFFF)
 
class Solution {
public:
	vector<vector<int>> levelOrder(Node* root) {
		queue<Node*> q;
		vector<vector<int>> ans;
 
		if (!root) {
			return ans;
		}
 
		root->val = PACK(0, root->val);
		q.push(root);
 
		while (!q.empty()) {
			auto cur = q.front();
			int level = UNPACK_LEVEL(cur->val);
			int val = UNPACK_VAL(cur->val);
			q.pop();
 
			if (level == ans.size()) {
				ans.push_back({});
			}
 
			ans[level].push_back(val);
 
			for (auto c : cur->children) {
				c->val = PACK(level + 1, c->val);
				q.push(c);
			}
		}
 
		return ans;
	}
};

다른 풀이

Go

  • 이전에 Go 로 풀었던 기록이 있어서 옮겨버리기