我在看本教程http://www.learn-c.org/en/Binary_trees,并在插入函数中将int与NULL进行比较。它似乎在tut网站上运行良好,但它对我无效,我的研究告诉我它不应该工作。我的代码如下。在int中将int与NULL进行比较 - 本教程不正确吗?
- 我错了,或者是教程错误?
如果教程有误,有什么办法可以动态设置BST的第一个节点的值?我想过检查左右两者是否都是空的,但这只会重置第一个节点。有一个节点的值的第三个指针看起来很浪费,但也许这是唯一的方法?
#include <stdio.h> #include <malloc.h> struct bstNode { int val; struct bstNode *left; struct bstNode *right; }; int insert(struct bstNode *head, int val); void printDFS(struct bstNode *head); int main() { struct bstNode *bstTree = malloc(sizeof(struct bstNode)); insert(bstTree, 8); insert(bstTree, 5); insert(bstTree, 98); insert(bstTree, 2); insert(bstTree, 15); insert(bstTree, 65); insert(bstTree, 15); printDFS(bstTree); } int insert(struct bstNode *head, int val) { //This is the problem statement, it contains random data when I debug as it's uninitialized if (head->val == NULL) { head->val = val; return 0; } if (val < head->val) { if (head->left != NULL) { return insert(head->left, val); } else { head->left = malloc(sizeof(struct bstNode)); head->left->val = val; return 0; } } else { if (head->right != NULL) { return insert(head->right, val); } else { head->right = malloc(sizeof(struct bstNode)); head->right->val = val; return 0; } } } void printDFS(struct bstNode *head) { if (head->left != NULL) printDFS(head->left); printf("%d ", head->val); if (head->right != NULL) printDFS(head->right); }
您的权利这可以在插入函数通过传递头指针的地址,如果该列表是空的解决,因此它可以被修改停止跟随这个tuto。使用NULL与NULL进行比较没有意义。 – Stargateur
作为整数,NULL通常只是0。 –
检查NULL值的定义。为了一个好的实现,它应该是一个'void *',编译器应该警告。即使** iff **'NULL'被定义为整数'0',这是非常糟糕的做法。正如@Stargateur写道:立即关闭这个网站,找到一个更好的或阅读_good_ C书。他们仍然是学习C的最佳方式,网络中只有太多糟糕的教程。 – Olaf