嗨,我通过Internet阅读了此逻辑,并尝试在C++中实现级别顺序树遍历
void levelorder(struct node* root)
{
struct node* temp = (struct node*)malloc(sizeof(struct node));
std::queue<node*> qq;
if(root==NULL)
{
return;
}
qq.push(root);
while(!qq.empty())
{
temp=qq.front();
qq.pop();
printf("%d",temp->data);
qq.push(temp->left);
qq.push(temp->right);
}
}
但是上面给了我一个错误分割错误,我认为这是因为
temp->left
不存在。还是我需要llQueue来实现呢?有人对此有任何想法吗?
最佳答案
该发布的代码未考虑树的叶子处的空指针。可以按照以下方式固定:
void levelorder(struct node* root)
{
std::queue<node*> qq;
qq.push(root);
while(!qq.empty())
{
struct node* node = qq.front();
qq.pop();
if (node) {
printf("%d",temp->data);
qq.push(temp->left);
qq.push(temp->right);
}
}
}
另一方面,丢失了对temp的内存分配:由于temp被分配给其他对象,因此该空间不会释放,而且还会泄漏。
关于c++ - 二叉树的层级遍历C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23008380/