3 → 1 bucket[3] 裡面是數字 1
2 → 2 bucket[2] 裡面是數字 2
bucket 的 index 就是出現次數:
bucket[1] 低頻
bucket[2]
bucket[3] 高頻
k = 要幾個答案;bucket index = 出現幾次;bucket 裡面 = 哪些數字出現這麼多次。
找 max 頻率,再填回本身數字;可能有多個數字同頻率,所以 bucket[freq] 才是 vector,不是單一 int。
3.102
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* node) {// 從最上面的 node 開始,一層一層讀 Tree
vector<vector<int>> answer;// 最後答案:每一層是一個 vector
if (!node)// 如果整棵 Tree 是空的
return answer;// 直接回傳 []
queue<TreeNode*> nodesToVisit;// Queue:存接下來要處理的 node
nodesToVisit.push(node);// 先把最上面的 node 放進 Queue
while (!nodesToVisit.empty()) {// Queue 還有 node 就繼續
int levelSize = nodesToVisit.size();// 記住「目前這一層」有幾個 node
vector<int> level;// 準備存目前這一層的數值
level.reserve(levelSize);// 先準備這一層需要的空間
for (int i = 0; i < levelSize; ++i) {// 只處理目前這一層
TreeNode* currentNode = nodesToVisit.front();//取Queue最前的node
nodesToVisit.pop();// 這個 node 已經開始處理,移出 Queue
level.push_back(currentNode->val);// 把目前 node 的 value 放進這一層
if (currentNode->left)// 如果有左邊 node
nodesToVisit.push(currentNode->left);// 放到 Queue,留給下一層處理
if (currentNode->right)// 如果有右邊 node
nodesToVisit.push(currentNode->right);// 放到 Queue,留給下一層處理
}
answer.push_back(level);// 完成一整層後,放進答案
}
return answer;// 回所有層
}
};