Я пишу код для возврата данных узла в BST на основе идентификатора.ниже мой класс узла:
struct Node{
int id;
string data;
Node *left;
Node *right;
Node();
};
ниже мой конструктор узла: я определил id и данные в функции addNode
Node :: Node(){
this->left = nullptr;
this->right = nullptr;
}
ниже мой класс BST:
class BST{
private:
Node * root = nullptr;
void setRoot(Node *);
Node* getRoot();
public:
Node *addNode(BST *, int);//helper function
Node *addNode(Node *,int);
string getEntry(BST*,int);//helper function
string getEntry(Node*,int);
}
ниже мои вспомогательные функции:
Node *BST::addNode(BST *bst, int val){
addNode(bst->getRoot(),val);
}
string BST::getEntry(BST* bst,int id){
getEntry(bst->getRoot(),id);
}
ниже мой класс addNode:
Node* BST::addNode(Node* root, int val) {
Node *newNode = new Node();
newNode->id = val;
newNode->data = "Number " + to_string(val);
if (root == nullptr) {
if (getRoot() == nullptr){
setRoot(newNode);
}
setCount(getCount()+1);
return newNode;
}
if (root->id > val) {
root->left = addNode(root->left, val);
} else {
root->right = addNode(root->right, val);
}
return root;
}
ниже мой класс getEntry:
string BST::getEntry(Node *base,int id) {
if (base == nullptr){
return "";
}
if (base->id == id){
cout<<base->data<<endl;
return base->data;
}
getEntry(base->left,id);
getEntry(base->right,id);
}
нижеузлы, которые я передал из main:
int main(){
BST *newBst = new BST();
newBst->addNode(newBst,1);
newBst->addNode(newBst,2);
newBst->addNode(newBst,3);
newBst->addNode(newBst,2);
newBst->addNode(newBst,3);
newBst->addNode(newBst,5);
newBst->addNode(newBst,7);
newBst->addNode(newBst,10);
cout<<newBst->getEntry(newBst,5)<<endl;
return 0;
}
Код скомпилируется, но ничего не возвращает, я пытался отладить, в «return base-> data data», ошибка «не могу»доступ к памяти по адресу 0xc8 ".В чем причина проблемы и что я могу с этим поделать?
- это предупреждение, которое я получаю, когда отлаживаю код.![enter image description here](https://i.stack.imgur.com/QnpjC.png)