[英]level order traversal of binary tree c++
嗨,我通过互联网阅读了此逻辑,并尝试在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被分配给其他对象,因此该空间不会释放,而且还会泄漏。
两个问题:
@anumi提出的实现是正确的。 但是我更喜欢这样:
void levelorder(struct node* root)
{
if(!root) return;
std::queue<node*> qq;
qq.push(root);
while(!qq.empty())
{
struct node* node = qq.front();
qq.pop();
printf("%d", node->data);
if(node->left) qq.push(node->left);
if(node->right) qq.push(node->right);
}
}
编辑:根据评论处理空树。
您的想法似乎是正确的,但是在不知道实际数据的情况下这是无法分辨的。 在您的代码中, left
成员和right
成员可能为NULL
或指向未定义的位置,这意味着跟随left
或right
指针可能会导致错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.