Для класса мы строим дерево двоичного поиска.Я полагаю, что смогу получить основную часть проекта самостоятельно (isPresent, оценить и т. Д.), Но у меня возникают проблемы при создании самого дерева.Учитывая входные данные из main:
int main()
{
BST *bst = new BST();
bst->add(20, "*");
bst->add(15, "-");
bst->add(6, "+");
bst->add(30, "/");
bst->add(8, "2");
bst->add(2, "4");
bst->add(25, "14");
bst->add(36, "7");
bst->add(18, "3");
cout << ((bst->isPresent(20)) ? "20 - Yes" : "20 - No") << endl;
cout << ((bst->isPresent(8)) ? "8 - Yes" : "8 - No") << endl;
cout << ((bst->isPresent(200)) ? "200 - Yes" : "200 - No") << endl;
Затем мы должны использовать предоставленный им BST.h, но к которому мы можем добавить информацию (которую я уже добавил совсем немного):
class BST
{
public:
BST();
void add(int key, string oper);
bool isPresent(int key) const;
private:
class Node
{
public:
friend class BST;
Node()
{
mLeft = mRight = nullptr;
mKey = NULL;
mOper = "NULL";
mToken = 0;
}
Node(int key, string oper)
{
mLeft = mRight = nullptr;
mKey = key;
mOper = oper;
mToken = 0;
}
bool find(int x); // Delete if you don't want it.
void insert(int key, string oper);
private:
Node *mLeft, *mRight;
int mKey = 0;
string mOper = "";
double mToken = 0;
Node *mRoot;
Node *helper;
};
};
В BST.cpp, который можно изменить любым способом, у меня есть
BST::BST()
{
int key = 0;
string oper = "NULL";
}
void BST::add(int key, string oper)
{
Node useThis = Node();
useThis.insert(key, oper);
}
bool BST::isPresent(int key) const
{
BST useThis = BST();
return useThis.find(key);
}
void BST::Node::insert(int key, string oper)
{
if (mRoot == NULL)
{
mRoot = new Node();
mRoot->mKey = key;
mRoot->mOper = oper;
mRoot->mToken;
mRoot->mLeft = mRoot->mRight = NULL;
cout << "Finished setting mRoot";
}
else
{
helper = new Node();
helper->mKey = key;
helper->mOper = oper;
helper->mToken;
helper->mLeft = mRoot->mRight = NULL;
if (helper->mToken < mRoot->mToken)
{
if (mRoot->mLeft == NULL)
{
mRoot->mLeft = helper;
}
else
{
mRoot->insert(mRoot->mLeft->mKey, mRoot->mLeft->mOper);
}
}
else
{
if (mRoot->mRight == NULL)
{
mRoot->mRight = helper;
}
else
{
mRoot->insert(mRoot->mRight->mKey, mRoot->mRight->mOper);
}
}
}
}
Введен только соответствующий код Я замечаю, что каждый раз, когда яперейти к добавлению, похоже, что mRoot был сброшен, и код продолжает пытаться установить mRoot в значения, которые я отправляю каждый раз (нажимает if (mRoot == NULL) несколько раз).Я надеялся выяснить, почему значение, введенное мною для mRoot, не сохраняется при переходе к методу поиска