C语言算法指针问题?

发布于 2022-09-04 10:54:07 字数 1749 浏览 28 评论 0

图片描述

上面诗题目,下面是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct node {
    struct node *lchild;
    struct node *rchild;
    int c;
} Node;

void postOrder(Node *T) {
    if (T->lchild != NULL) {
        postOrder(T->lchild);
    }

    if (T->rchild != NULL) {
        postOrder(T->rchild);
    }

    printf("%d ", T->c);
}

void inOrder(Node *T) {
    if (T->lchild != NULL) {
        inOrder(T->lchild);
    }

    printf("%d ", T->c);

    if (T->rchild != NULL) {
        inOrder(T->rchild);
    }
}

void preOrder(Node *T) {
    printf("%d ", T->c);

    if (T->lchild != NULL) {
        preOrder(T->lchild);
    }

    if (T->rchild != NULL) {
        preOrder(T->lchild);
    }
}

Node *Insert(Node *T, int x) {
    if (T == NULL) {
        T = (Node *)malloc(sizeof(Node));
        T->c = x;
        T->lchild = T->rchild = NULL;
    } else if(x < T->c) {
        T->lchild = Insert(T->lchild, x);
    } else if(x > T->c) {
        T->rchild = Insert(T->rchild, x);
    }

    return T;
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        Node *T = NULL;
        int i = 0;
        int x = 0;
        for (i = 0; i < n; i++) {
            scanf("%d", &x);
            T = Insert(T, x);
            preOrder(T);
        }
        preOrder(T);
        printf("\n");
        inOrder(T);
        printf("\n");
        postOrder(T);
        printf("\n");
    }
    return 0;
}

我编译的时候没有问题,可一运行就崩溃了。估计是指针出问题了,可我实在不知道该怎么改了,求大神指导。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

转身以后 2022-09-11 10:54:07

void preOrder(Node *T)函数实现的第6行,应该是preOrder(T->rchild);而不是重复地 preOrder(T->lchild);,属于粗疏错误,应该多学debug。

仙女 2022-09-11 10:54:07

1、NODE *T写到while外面
2、Insert 没有处理等于的情况

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文