これは本当に簡単なはずですが、私はかなり長い間これに問題を抱えています。タイトルが示すように、私は最小値を持つバイナリツリー(BSTではありません!)でノードを見つけて返すことを試みています。少なくとも関数内で最小の値を割り当てることができる再帰的なvoid関数を非常に簡単に作成できますが、NULLポインターに到達すると、前のノードに戻る方法に行き詰まります。
左右の子へのポインタを持つノードクラスがあり、それぞれに独自の値があります。これが私の(失敗した)試みです:
int preOrder(Node *node, int value, int count, int sizeOfTree)
{
count++; //keeps track of whether or not we have traversed the whole tree
if(value < node->getValue())
value = node->getValue();
if(count == sizeOfTree);
return value;
if(node == NULL)
//Want to return to the previous function call
//How do I do this for a non void function?
//for a void function, you could jsut type "return;" and the function
//back tracks to your previous place in the tree
//but since I'm returning a value, How would I go about doing this?
//these 2 calls are incorrect but the idea is that I first traverse the left subtree
//followed by a traversal of the right subtree.
preOrder(node->getLeft(), value);
preOrder(node->getRight(), value);
}
可能であれば、コードをよりクリーンにするために、「カウント」も追跡せずにこれを試してみたいと思います。さらに説明が必要な場合はお知らせください。