【发布时间】:2017-05-10 20:54:22
【问题描述】:
我是 C 编程新手,这是我第一次处理复杂的程序。该程序会将电话簿(姓名和号码)放入二叉搜索树中。出现的问题是为什么我在程序中使用的递归和所有指针都会出错。 我的 struct def 也可能是错误的.. 如果有人能指出这个问题以及如何解决它,我会很高兴。
typedef struct _bstree {
char * name[60];
unsigned long phone;
struct bstree *left;
struct bstree *right;
}bstree;
typedef struct _bst_node {
int value;
struct node* next;
}bst_node;
这里是函数(我不允许更改函数的类型或其参数):
void bst_insert_node(bstree* bst, unsigned long phone, char *name) {
if (bst == NULL) {
bstree *newNode = (bstree *)malloc(sizeof(bstree));
newNode->phone = phone;
strcpy(newNode->name,name);
newNode->left = NULL;
newNode->right = NULL;
}
else if (bst->phone>phone) {
bst_insert_node(bst->left,phone, name); //ERROR
}
else {
bst_insert_node(bst->right, phone, name); //ERROR
}
}
bst_node* find_node(bstree* bst, unsigned long phone) {
if (bst==NULL) {
printf("Cannot find Number");
return NULL;
}
//if phone ist root
if (phone== bst->phone)
return bst; //ERROR
bstree* searching = NULL;
//left search
searching = find_node(bst->left,phone); //ERROR
if (searching)
return searching; //ERROR
// right search
searching = find_node(bst->right,phone); //ERROR
if (searching)
return searching; //ERROR
if (searching)
return searching; //ERROR
return NULL;
}
【问题讨论】:
-
char * name[60];-->char name[60]; -
这修复了一些错误,谢谢。
-
bstree和bst_node是不同的类型。 -
typedef struct bstree { ... }bstree; -
在我看来你没有区分节点和树
标签: c pointers recursion binary-search-tree