我的 BreadthFirstTraversal 实现给出分段错误
My BreadthFirstTraversal implementation giving segmentation fault
我试图自己实现 BFS 并为其编写了一些代码。我 运行 通过调试器的代码和 while 循环的所有迭代 运行 除了最后一个之外都很好。
当最后一个指针在队列(缓冲区)内时,if 条件:
if (l) {
buffer.push(l);
cout << l - > val << endl;
}
变为真(当它应该为假时)。它会导致分段错误。为什么会这样?这是完整的代码...
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct node {
int val;
struct node * left;
struct node * right;
};
vector < int > a {
1,
5,
4,
3,
7,
2,
9
};
vector < node > tree(6, {
0,
nullptr,
nullptr
});
void make_tree() {
for (auto i = 0; i < 7; i++) {
tree[i].val = a[i];
}
for (auto j = 0; j < 3; j++) {
tree[j].left = & (tree[2 * (j + 1) - 1]);
tree[j].right = & (tree[2 * (j + 1)]);
}
}
node * temp = & tree[0];
queue < node * > buffer;
void BFS()
{
buffer.push(temp);
node * r = nullptr;
node * l = nullptr;
cout << (buffer.front()) - > val << endl;
while (!buffer.empty())
{
l = (buffer.front() - > left);
if (l) {
buffer.push(l);
cout << l - > val << endl;
}
r = (buffer.front() - > right);
if (r) {
buffer.push(r);
cout << r - > val << endl;
}
buffer.pop();
}
}
int main()
{
make_tree();
BFS();
return 0;
}
您正在从 0 .. 6
索引到 tree
,但只创建了 6 个 node
。创建 7 node
s 修复它:
vector < node > tree(7, { 0, nullptr, nullptr });
我试图自己实现 BFS 并为其编写了一些代码。我 运行 通过调试器的代码和 while 循环的所有迭代 运行 除了最后一个之外都很好。 当最后一个指针在队列(缓冲区)内时,if 条件:
if (l) {
buffer.push(l);
cout << l - > val << endl;
}
变为真(当它应该为假时)。它会导致分段错误。为什么会这样?这是完整的代码...
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct node {
int val;
struct node * left;
struct node * right;
};
vector < int > a {
1,
5,
4,
3,
7,
2,
9
};
vector < node > tree(6, {
0,
nullptr,
nullptr
});
void make_tree() {
for (auto i = 0; i < 7; i++) {
tree[i].val = a[i];
}
for (auto j = 0; j < 3; j++) {
tree[j].left = & (tree[2 * (j + 1) - 1]);
tree[j].right = & (tree[2 * (j + 1)]);
}
}
node * temp = & tree[0];
queue < node * > buffer;
void BFS()
{
buffer.push(temp);
node * r = nullptr;
node * l = nullptr;
cout << (buffer.front()) - > val << endl;
while (!buffer.empty())
{
l = (buffer.front() - > left);
if (l) {
buffer.push(l);
cout << l - > val << endl;
}
r = (buffer.front() - > right);
if (r) {
buffer.push(r);
cout << r - > val << endl;
}
buffer.pop();
}
}
int main()
{
make_tree();
BFS();
return 0;
}
您正在从 0 .. 6
索引到 tree
,但只创建了 6 个 node
。创建 7 node
s 修复它:
vector < node > tree(7, { 0, nullptr, nullptr });