私はC ++で二分木を構築しています。再帰的な方法で検索要素の機能を追加しようとしました。
正しく動作していません。
以下のコードとガイドをご覧ください。
bool Binarytree::SearchElement(node* SearchPtr,int key,bool found) {
if(SearchPtr->data==key)
found=true;
if(SearchPtr==NULL || found==true)
return found;
else
{
if(SearchPtr->data>key)
{ cout<<endl<<"Seaching in Left Sub tree"<<endl;
SearchElement(SearchPtr->left,key,found);
}
else
{ cout<<endl<<"Seaching in right Sub tree"<<endl;
SearchElement(SearchPtr->right,key,found);
}
}
}
この関数SearchElement
は次のように呼び出されます:(値1はツリーに存在しないことに注意してください)
if(SearchElement(root,1,false))
cout<<endl<<"Element Found"<<endl;
else
cout<<endl<<"Element not Found"<<endl;
あなたは何も返していません。見つけNULL
たら、戻る必要がありますfalse
。そして、あなたが要素を見つけたなら、あなたは返す必要がありますtrue
。要素が存在するかどうかがわかったら、すべての再帰呼び出しに戻る必要があります。以下のコードを確認してください。
注:あなたは二分木について言及し、二分探索木のように検索しました。二分探索木であることを考えると、次のようになります。
bool Binarytree::SearchElement(node* SearchPtr,int key) {
if(SearchPtr->data==key)
return true;
if(SearchPtr==NULL)
return false;
if(SearchPtr->data < key) //not greater than, but less than
{ cout<<endl<<"Seaching in Left Sub tree"<<endl;
return SearchElement(SearchPtr->left,key);
}
else
{ cout<<endl<<"Seaching in right Sub tree"<<endl;
return SearchElement(SearchPtr->right,key);
}
}
二分木である場合は、要素が存在するかどうかを確認するためにツリー全体をトラバースする必要があります。このような:
bool Binarytree::SearchElement(node* SearchPtr,int key) {
if (SearchPtr==NULL)
return false;
if(SearchPtr->data==key)
return true;
if (SearchElement(SearchPtr->left,key))
return true;
if (SearchElement(SearchPtr->right,key))
return true;
return false;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加