我試圖做一個二叉搜索樹,但是當我嘗試插入任何值,或者更確切地說,當一個NULL指針傳遞給該函數時,它只是凍結了一會兒,然後它崩潰。這裏的代碼:二叉搜索樹插入錯誤
void create(int co, struct node **leaf){
if(*leaf==0){
(*leaf)=malloc(sizeof(**leaf));
(*leaf)->val=co;
(*leaf)->left=0;
(*leaf)->right=0;
}
else if(co<(*leaf)->val){
create(co, &(*leaf)->left);
}
else if(co>=(*leaf)->val){
create(co, &(*leaf)->right);
}
}
我不明白爲什麼它這樣做。你可以解釋嗎?
編輯:該函數的第一呼叫看起來像這樣:
struct node *root;
root=0;
for(i=0;i<c;i++){
create(f[i], &root);
}
其中c是數組中元素的數目。這是結構的定義:
struct node{
int val;
struct node *left;
struct node *right;
};
所以,問題不是出在我這裏貼的代碼,整個代碼可以發現here如果我只是重寫整個問題,只是在這裏張貼整個代碼請在通信中如此安排,儘量糾正。
找到我的答案 當我真的安全地過去了create
之後,我找到了最後一個弄錯了我的程序的錯誤。這是*i++;
。顯然,++不能很好地處理所指向的值。在我將其重寫爲*i=*i+1;
後終於有效,所以我要感謝所有幫助過我的人,並提出了最後一個問題:*i++;
和*i=i+1;
之間有什麼區別?
當你說「一個NULL指針被傳遞給函數」,你的意思是'leaf == NULL'或'* leaf == NULL'? – interjay
你的第一個'if'條件不應該是if(* leaf == NULL)'嗎? – noMAD
@netcoder是不是該做什麼?你需要與'struct node'關聯的空間,對吧? – noMAD