我試圖寫一個小程序,通過在數字陣列的例子不勝枚舉,只是將它們插入到二叉搜索樹。下面是我有:解析未初始化值轉換爲功能
#include <stdio.h>
#include <stdlib.h>
typedef struct node_t node_t;
struct node_t {
int data;
node_t *left;
node_t *right;
};
int insert(node_t *node, int n);
int main(void) {
int array[8] = {5, 8, 3, 6, 9, 2, 4, 7};
int i;
node_t *root;
for (i = 0; i < 8; i++) {
insert(root, array[i]);
}
return 0;
}
int insert(node_t *node, int n) {
if (node == NULL) {
node = malloc(sizeof node);
node->data = n;
return 1;
}
if (n > node->data) {
insert(node->left, n);
} else if (n < node->data) {
insert(node->right, n);
} else {
return -1;
}
return 0; // Suppress 'control reaches end of non-void function'
}
,當我用gcc編譯我得到一個警告說「‘根’可以使用此功能初始化」。運行它會導致錯誤(在Windows上至少),但是,在main()
打印出root->data
產生一個0
我想實現這個想法的insert()
功能檢查,如果指針輸入節點是NULL
所以然後可以malloc它。另外,由於處理遞歸的方式,插入的數字應該插入該節點。如果節點不等於NULL
,那麼我將在應該插入數字的節點一側再次遞歸調用insert()
。
我明白爲什麼這不起作用,有事情做與指針root
不隨地執導,也不root->left
/root->right
,但是,我不知道我能做些什麼來解決這個問題的原因。任何幫助將不勝感激,謝謝!
無關,但會發生什麼,從遞歸調用返回的值? –
至於你的問題,搜索*模擬c *通過引用傳遞。 –
@Someprogrammerdude對不起,我做了一些修改,因爲代碼是從錯誤的角度考慮的,試圖排除它。就搜索而言,我可能會錯過一些東西,但Google上的3個頂級結果似乎並沒有幫助,他們似乎在討論將初始化變量的地址傳遞給函數,而我將一個指針傳遞給還沒有被告知要存儲的地址。 – Arkantos