Cでバイナリ検索ツリーを作成しようとしています。whileループ条件チェック
私はほとんどの部分を分かっていますが、タスクを完了しても悩まされていました。
これは、ノードのデータ(この場合はtemp->data
)を返すことになっている検索機能です。
char bst_search(int key){
tree_pointer temp = root;
while(temp != NULL){
if(temp->key < key){ // navigate down the tree
temp = temp->right;
} else temp = temp->left;
if(temp->key == key){
return temp->data;
}
}
return NULL;
}
この関数は、バイナリツリー内ではなかったキーが(したがってNULLを返す必要があります)時に失敗したと保管:私は、次のようなコードを書いたとき
はしかし、それは私にエラーを与えて上に保存しましたクラッシュする。いくつかの可能性を試した後、キーチェックをwhileループの前部に動かすことでこの問題が解決されたことに気付きました。
char bst_search(int key){
tree_pointer temp = root;
while(temp != NULL){
if(temp->key == key){
return temp->data;
}
if(temp->key < key){ // navigate down the tree
temp = temp->right;
} else temp = temp->left;
}
return NULL;
}
ループ条件(温度)内の変数は、そのループの本体のコードに変更があったとき、私は好奇心(一時はtemp-に変更されているように>左またはtemp->右)、ありません条件が再びチェックされる?
私はあなたのほとんどの人にとってかなり明白な何かを逃していると感じます。どんな助けもありがとう!
コメントありがとうございました:Dの\ nは を、それはリーフノードに到達し、一時はNULLになると、いけませんwhileループブレーク(条件は!= NULLなので)、最後にNULLを返します。 –
アルゴリズムは適切に動作するためには*すべきですが、その必要があります。これはあなたがしていたことではありません。私の答えの修正を見てください。 –
Cは状態マシンのように動作します。反復ごとに条件をチェックするだけです。とにかく、私はgdb、lldbなどのデバッガを使用してコードをステップ実行するように言いたいと思っていました。あなたはすぐにこれらのようなエラーをキャッチします。 – vindarmagnus