2013-04-10 121 views
1

我需要將字符串插入到二叉搜索樹中,但每個遍歷插入函數都會更新所有節點,而不僅僅是適當的。 它要求放置在二叉搜索樹中的每個單詞具有爲其分配的確切內存量(空指針+1)。將字符串插入二進制搜索樹C

這裏是正在使用的結構:

typedef struct node_t{ 
    char *word; 
    struct node_t *left, *right; 
} node_t; 

以下是我想過去的話:

for(i=0; i< original_words -1; i++) 
{ 
    fscanf(ifp, "%s", y); 
    head = insert(head, y); 
} 

這是我的插入功能:

node_t *insert(struct node_t *head, char *word) 
{ 

if(strcmp(head->word, word) > 0) 
{ 

    if(head->left == NULL) 
    { 
     head->left = create_node(word); 
    } 
    else 
    { 
     head->left = insert(head->left, word); 
    } 
} 

else 
{ 
    if(head->right == NULL) 
    { 
     head->right = create_node(word); 
    } 
    else 
    { 
     head->right = insert(head->right, word); 
    } 
} 

return head; 

} 

編輯:這裏有一個輸入文件的例子。

4 
------- 
bravo 
------- 
alpha 
------- 
gamma 
------- 
delta 
+0

當strcmp(head-> word,word)== 0'時會發生什麼?你應該專門處理這種情況... – 2013-04-10 20:04:38

+3

今天有東西插入到BST中。我向上帝發誓我今天看到了5個類似的問題。在某所大學是不是BST的一天? – 2013-04-10 20:04:51

+0

@VladLazarenko你可能是正確的這一個。 – 2013-04-10 20:12:00

回答

1

你的回答(在insert功能)假定head已經在第一次通話中定義,它應該與線開始:

if (head == null) return create_node(word); 

這也將節省您需要對空代碼中的行。我不確定這是問題,但它是一個。

也許更重要的是:create_node如何設置word?如果它是這樣的:

new_node->word = word 

然後,你正在做的是創建一個指向從文件中拉出的單詞的指針集合。很有可能每次從文件中讀取一個單詞的時候都會把這個單詞讀入同一塊內存,所以你所做的只是收集一個指向內存中同一個地方的指針樹。它應該是這樣的:

new_node->word = malloc(strlen(word)+1); 
if (new_note->word == null) {FAIL MEMORY LOSS} 
strcpy(new_node->word, word);