嗨,我通过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/

10-11 16:22