树迭代法的后序遍历

Postorder Traversal of Tree iterative method

我正在尝试使用迭代方法使用 2 个堆栈实现树的后序遍历。我已经实现了正确的算法。但仍然没有得到输出,出现错误,分段错误(核心已转储)。 谁能告诉我哪里做错了?

void postorder_iterative(struct node *root)
{
    struct node *stack1[15],*stack2[15];
    int top1=-1,top2 =-1;
    root = stack1[++top1];

    while(top1>=0)
    {
        root = stack1[top1--];
        stack2[++top2] =root;
        if(root->left != NULL)
            stack1[++top1] = root->left;
        if(root->right != NULL)
            stack1[++top1] = root->right;

    }
    while(top2>=0)
        printf("%c\t",stack2[top2--]->data);
}

在循环的第一次迭代中,您正在使用此语句读取未定义的值:

root = stack1[top1--];

第一个堆栈元素未定义,因为您从未对其进行初始化。 应该 在这里初始化:

root = stack1[++top1];

但这并没有将任何东西放入堆栈。相反,它会用未定义的值覆盖 root

应该是反过来的:

stack1[++top1] = root;

这解决了问题。

不要忘记在打印列表后打印换行符,所以什么都没有