バイナリ検索ツリーに整数値を挿入するプログラムを作成しました。それはうまくいくようですが、整数の代わりに文字配列を受け入れるように変更すると、予期しない結果が得られます。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'のコンストラクタを呼び出さない。おそらくそれがセグメンテーション違反を持っている理由です。 –
それは私が知りませんでした! 多くのことがあります! –