问题描述
上面诗题目,下面是代码:
#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;}
我编译的时候没有问题,可一运行就崩溃了。估计是指针出问题了,可我实在不知道该怎么改了,求大神指导。
问题解答
回答1:在void preOrder(Node *T)函数实现的第6行,应该是preOrder(T->rchild);而不是重复地 preOrder(T->lchild);,属于粗疏错误,应该多学debug。
回答2:1、NODE *T写到while外面2、Insert 没有处理等于的情况