0
私はすでにコードをデバッグしており、間違いはありませんでした。以下のコードは、バイナリ検索ツリー(BST)のすべてのデータを出力しません。ルートノードのみ、最後の2ノードはインオーダートラバーサルで表示されます。バイナリ検索ツリーの出力が正しくありません
struct node{
int key;
node *left;
node *right;
};
node* newNode(int data){
node *ptr=new node;
ptr->key=data;
ptr->left=ptr->right=NULL;
return ptr;
}
node* insert_node(node* root,int data){
if(root==NULL){
root=newNode(data);
}else if(data<=root->key){
root->left=newNode(data);
}else{
root->right=newNode(data);
}
return root;
}
void inorder(node* root){
if(root==NULL)
return;
inorder(root->left);
cout<<root->key<<" ";
inorder(root->right);
}
int main(){
node *root=NULL;
root=insert_node(root,10);
root=insert_node(root,12);
root=insert_node(root,15);
root=insert_node(root,1);
root=insert_node(root,20);
inorder(root);
return 0;
}
まず、 'data = 10'(これは' root'の役割を果たす)のノードを挿入します。次に、 'data = 8'というノードを挿入します。そのため、左に挿入します。さて、あなたは 'data = 6'でノードを挿入します。あなたのルートノードは同じであるので、誤っていなければ 'data = 6'のノードは' data = 8'のノードを上書きします。さらに、これは 'data = 8'のノードが削除されずにアクセスできないためにメモリリークを引き起こします – Fureeish
*私はすでにコードをデバッグして間違いを見つけませんでした* - 間違いが見つからなかった場合、あなたは問題がありますか?何かが正しく動作しないことが分かっているなら、間違いがあります。 – PaulMcKenzie
@Fureeishデータは、再帰によってリーフでのみ追加されます。 'data = 8'が挿入されている場合はルートの左に挿入されますが、' data = 6'が挿入されると 'data = 8'ノードの左に挿入されます。 – ankuselfie