教授提供了此代码,但我不断遇到无限循环。我也无法理解for循环中带有“:”的auto关键字。
我似乎无法理解错误所在。
vector<int> levelOrder(TreeNode* root) {
vector<int> res;
if (root == NULL)
return res;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* curr = q.front();
q.pop();
if (curr->left != NULL)
q.push(curr->left);
if (curr->right != NULL)
q.push(curr->right);
res.push_back(curr->data);
}
}
return res;
}
...
int main () {
...
vector<int> items = levelOrder(root);
for (int item : items) {
cout << item << " ";
}
cout << endl;
...
return 0;
}
Infinite Loop
答案 0 :(得分:2)
首先,进行级别顺序遍历的经典方法是使用队列,而您的代码正在执行该操作。
但是,您不必依赖队列的状态来使用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;
}