Во-первых, классический способ сделать обход уровня - использовать очередь, и ваш код делает это.
Однако вместо того, чтобы полагаться на состояние очереди для цикла с использованием условия while(!q.empty())
, у вас есть совершенно ненужный и, вероятно, вредный внутренний цикл for
. Если вы удалили внутренний цикл, то код должен работать правильно.
Пример:
vector<int> levelOrder(TreeNode* root) {
vector<int> res;
if (!root)
return res;
queue<TreeNode*> q;
q.push(root);
while (!q.empty())
{
TreeNode* curr = q.front();
q.pop();
if (curr->left)
q.push(curr->left);
if (curr->right)
q.push(curr->right);
res.push_back(curr->data);
}
return res;
}