Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用两个堆栈的C BST后序遍历_C - Fatal编程技术网

使用两个堆栈的C BST后序遍历

使用两个堆栈的C BST后序遍历,c,C,我试图通过使用两个堆栈以迭代方式进行后序遍历,但没有效果 我不知道为什么它不能推入从第一个堆栈弹出的节点的第二个堆栈 编辑:添加了推送和弹出实现。如果需要更多细节,请告诉我,谢谢。不确定为什么我不能将弹出的节点推入另一个堆栈,尽管我可以将初始节点推入S1 完整代码: printf(“%d”,pop(S2))。我认为pop()返回指向BSTNode的指针。您可能需要打印弹出的值item@kuro问题是我似乎无法推动(S2,弹出的项目);“无法推动”并不能清楚地描述您所观察到的问题。请提供准确的预

我试图通过使用两个堆栈以迭代方式进行后序遍历,但没有效果

我不知道为什么它不能推入从第一个堆栈弹出的节点的第二个堆栈

编辑:添加了推送和弹出实现。如果需要更多细节,请告诉我,谢谢。不确定为什么我不能将弹出的节点推入另一个堆栈,尽管我可以将初始节点推入S1

完整代码:


printf(“%d”,pop(S2))。我认为
pop()
返回指向BSTNode的指针。您可能需要打印弹出的值item@kuro问题是我似乎无法推动(S2,弹出的项目);“无法推动”并不能清楚地描述您所观察到的问题。请提供准确的预期行为和实际行为。@dikolav150然后您能分享
push()
pop()
的函数实现吗?或者像@kaylum所说的,一个最小的例子是最好的
push(S2,popped_项)考虑这一点:“代码> S2 < /代码>的值是什么?使用调试器。使用正确的工具可以更容易地找到这些东西。调试器将立即告诉您哪行代码触发了崩溃,以及变量值是什么。也可以单步执行代码。这些是基本的调试步骤。
printf(“%d”,pop(S2))。我认为
pop()
返回指向BSTNode的指针。您可能需要打印弹出的值item@kuro问题是我似乎无法推动(S2,弹出的项目);“无法推动”并不能清楚地描述您所观察到的问题。请提供准确的预期行为和实际行为。@dikolav150然后您能分享
push()
pop()
的函数实现吗?或者像@kaylum所说的,一个最小的例子是最好的
push(S2,popped_项)考虑这一点:“代码> S2 < /代码>的值是什么?使用调试器。使用正确的工具可以更容易地找到这些东西。调试器将立即告诉您哪行代码触发了崩溃,以及变量值是什么。也可以单步执行代码。这些是基本的调试步骤。
void postOrderIterativeUsingTwoStacks(BSTNode *root)
{
    Stack *S;
    Stack *S2;

    BSTNode *current = root;
    push(S, current);

    while(!isEmpty(S))
    {



        BSTNode *popped_item = pop(S);
        printf("works\n");
        push(S2,popped_item);
        printf("doesn't work\n");

        push(S, popped_item->left);
        push(S, popped_item->right);




    }

    while(!isEmpty(S2))
    {


        printf("%d ", pop(S2));
    }
}

void push(Stack *stack, BSTNode * node)
{
    StackNode *temp;

    temp = malloc(sizeof(StackNode));

    if (temp == NULL)
        return;
    temp->data = node;

    if (stack->top == NULL)
    {
        stack->top = temp;
        temp->next = NULL;
    }
    else
    {
        temp->next = stack->top;
        stack->top = temp;
    }
}


BSTNode * pop(Stack * s)
{
    StackNode *temp, *t;
    BSTNode * ptr;
    ptr = NULL;

    t = s->top;
    if (t != NULL)
    {
        temp = t->next;
        ptr = t->data;

        s->top = temp;
        free(t);
        t = NULL;
    }

    return ptr;
}