我在看本教程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