BST のルート ノードからターゲット ノードへのパスを表示しようとしています。私が持っている関数は、最初の 2 つのレイヤーでは正常に機能しますが、その後はうまくいきません。たとえば、テスト番号は 6、9、4、11、10 の順に挿入されます。6、9、または 4 を検索すると機能します (例: "6 9")。しかし、11 または 10 を試してみると、両方が表示され、順不同で表示されます。なぜだろうとちょっと困っています。どんなアイデアも素晴らしいでしょう!
template <class T>
void BST<T>::displayPath(T searchKey, BST<T> *node)
{
if (searchKey == node->mData)
{
cout << node->mData << " ";
}
else if (searchKey < node->mData )
{
cout << node->mData << " ";
displayPath(searchKey, node->mLeft);
}
else// (searchKey > node->mData)
{
cout << node->mData << " ";
displayPath(searchKey, node->mRight);
}
}
これが挿入機能です。番号は上記の順序で挿入されます。
template <class T>
void BST<T>::insert(BST<T> *&node, T data)
{
// If the tree is empty, make a new node and make it
// the root of the tree.
if (node == NULL)
{
node = new BST<T>(data, NULL, NULL);
return;
}
// If num is already in tree: return.
if (node->mData == data)
return;
// The tree is not empty: insert the new node into the
// left or right subtree.
if (data < node->mData)
insert(node->mLeft, data);
else
insert(node->mRight, data);
}