2010-12-13 29 views
-1

私は値のバイナリ検索ツリーを検索し、その値でTreeNodeを返す関数を作成しようとしています。バイナリ検索ツリーの質問

struct TreeNode 
{ 
    int value; 
    struct TreeNode *pLeft, *pRight; 
}; 
TreeNode* SearchTree(int query); 

(任意のノードについて:this->pLeftthis->pRightthis->value次いで、ノードは大きい含ま、以下this->valueがノードを含む)

+0

いいえ。あなたはこれまで何を得ていますか? –

+0

私がこれまでに持っていたコードは既にリストされています。 –

+2

他の人があなたの宿題をするとは思わないでください。あなたが何かにこだわっているなら、ここの人々はあなたの仕事を進めることができるようにいくつかのヒントを与えることができます。しかし、その前に、自分が何をやっているのか、どこに問題があるのか​​を知っていることを示す必要があります。 – Pirooz

答えて

2

それはのラインに沿ったものになるだろう:もしノードがその

treenode* SearchTree(int query, treenode* node) 
{ 
    if(node == NULL) 
     return NULL; 
    else if(query == node->value) 
     return node; 
    else if(query < node->value) 
     return SearchTree(query, node->pLeft); 
    else if(query > node->value) 
     return SearchTree(query, node->pRight); 
    else 
     return NULL; 
} 

あなたは、あなたが探しているものの価値を持っていて、ノードアドレスを返します。現在のノードの値が検索している値よりも小さい場合は、右のリーフに移動し、現在のノードの値が検索している値よりも大きい場合は、左のリーフに移動します。木がどのように終了するかについての実装に応じて、空の葉に当たるまで繰り返されます。しかしそれは一般的な考えです。

+0

ここで2つの基本エラーがあります。1.クエリがツリーにない場合、関数には終了基準はありません。 (私はあなたの解説でこれを言及していることを知っていますが、それよりも重要です - それはコード上にあるべきです)2.あなたは価値を返さない。 – TonyK

+1

TonyK、ok私は終了基準をチェックするためにコードを変更しました。何らかの形で彼自身の終了があるかもしれません。私はすべてのリーフノードがNULLになったと仮定しています。質問は値自体ではなく値でTreeNodeを返すように求められました。 – han

+0

私はこのコードを少し簡略化しました。いくつかの 'return'ステートメントが欠けていて、' node'でなければならない場所で 'this'を参照しました。 – asveikau

0

再帰を使用してこれを解決します。

  • 終了する必要があります。

  • ツリーノードをチェックして自身を呼び出す再帰的な手順も必要です。

戻り値が見つからない場合はNULLを使用することをお勧めします。

関連する問題