我已經編寫了一個程序,它將整數值插入到二叉搜索樹中。它似乎工作正常,但當我修改相同的接受字符數組而不是一個整數,我會得到意想不到的結果。 這裏是我的完整代碼:C++中字符串實現的二叉搜索樹
struct Node{
char data[50];
struct Node* right;
struct Node* left;
};
typedef struct Node* NODE;
NODE createNode(char data[]){
NODE newNode = (NODE) malloc (sizeof(struct Node));
if(!newNode){
cout<<"Not enough memory"<<endl;
exit(-1);
}
newNode->left = NULL;
newNode->right = NULL;
strcpy(newNode->data,data);
return (newNode);
}
void insertNode(NODE* head,char data[]){
NODE newNode = createNode(data);
NODE hold_the_head = *head;
if(*head == NULL){
*head = newNode;
(*head)->right = NULL;
(*head)->left = NULL;
return;
}
while(1){
if((newNode->data>(*head)->data)&&((*head)->right== NULL)){
(*head)->right = newNode;
*head = hold_the_head;
return;
}
else if(newNode->data > (*head)->data){
(*head) = (*head)->right;
}
else if((newNode->data < (*head)->data) && ((*head)->left == NULL)){
(*head)->left = newNode;
*head = hold_the_head;
return;
}
else if(newNode->data < (*head)->data){
(*head) = (*head)->left;
}
}
}
void inOrderTraversal(NODE node){
if(node == NULL)
return;
inOrderTraversal(node->left);
cout<<node->data<<"\t";
inOrderTraversal(node->right);
}
int main(){
NODE head = NULL;
insertNode(&head,"karan");
insertNode(&head,"sameer");
insertNode(&head,"palak");
insertNode(&head,"jagdish");
insertNode(&head,"naman");
insertNode(&head,"umang");
insertNode(&head,"chandu");
inOrderTraversal(head);
cout<<endl;
return 0;
}
輸出:
卡蘭薩米爾PALAK賈格迪什·納曼umang chandu
預計:
chandu賈格迪什·卡蘭納曼PALAK薩米爾umang
像這樣的問題已經被問過,但是有一些編譯錯誤。我的代碼沒有拋出任何錯誤,但似乎有一些邏輯缺陷!
Thanx很多.. !!其實我曾嘗試使用字符串,而不是字符數組..但是有一個分段錯誤,我無法解決它,所以我決定使用字符數組! –
同樣,'malloc'不會調用任何構造函數,所以也不會調用成員std :: string的構造函數。可能這就是你得到分段錯誤的原因。 –
這是我不知道的! 非常感謝! –