<分区>
我不知道是什么原因造成的。你们能帮帮我吗?自上次人们提示以来,因为我应该只发布 MCVE 而不是所有源代码。我只会发布(我认为)与该问题相关的内容。它基本上是一个二叉搜索树,未处理的异常与 BST 类的 add 方法有关。
节点.h
#ifndef NODE_H
#define NODE_H
#include "Button.h"
class Node
{
private:
int key;
Node* left;
Node* right;
Button nextPlay;
bool used;
public:
Node();
Node(int k, int x, int y);
void setLeft(Node* n);
Node* getLeft();
void setRight(Node* n);
Node* getRight();
Button getPlay();
int getKey();
void setUsed();
bool getUsed();
};
#endif
节点.cpp
#include "Node.h"
Node::Node()
{
key = 0;
left = NULL;
right = NULL;
//nextPlay = NULL;
used = false;
}
Node::Node(int k, int x, int y)
{
key = k;
left = NULL;
right = NULL;
nextPlay.getPosition()->x = x;
nextPlay.getPosition()->y = y;
used = false;
}
void Node::setLeft(Node* n)
{
left = n;
}
Node* Node::getLeft()
{
return left;
}
void Node::setRight(Node* n)
{
right = n;
}
Node* Node::getRight()
{
return right;
}
Button Node::getPlay()
{
return nextPlay;
}
int Node::getKey()
{
return key;
}
void Node::setUsed()
{
used = true;
}
bool Node::getUsed()
{
return used;
}
BST.h
#ifndef BST_H
#define BST_H
#include "Node.h"
class BST
{
private:
Node* root;
bool add(Node* n, int k, int x, int y);
int remAll(Node* n);
Button get(Node* n);
public:
BST();
~BST();
bool add(int k, int x, int y);
int remAll();
Button get();
};
#endif
BST.cpp
#include "BST.h"
BST::BST()
{
root = NULL;
}
BST::~BST()
{
remAll();
}
bool BST::add(Node* n, int k, int x, int y)
{
bool success;
if (n = NULL)
{
n = new Node(k, x, y);
success = true;
}
else
{
if (k == n->getKey())
{
success = false;
}
else
{
if (k < n->getKey())
{
Node* leftTree = n->getLeft();
success = add(leftTree, k, x, y);
n->setLeft(leftTree);
}
else
{
Node* rightTree = n->getRight();
success = add(rightTree, k, x, y);
n->setRight(rightTree);
}
}
}
return success;
}
int BST::remAll(Node* n)
{
int number;
if (n == NULL)
{
number = 0;
}
else
{
number = remAll(n->getLeft());
number += remAll(n->getRight());
delete n;
number++;
}
return number;
}
Button BST::get(Node* n)
{
if (n != NULL)
{
if (!n->getUsed())
{
n->setUsed();
return n->getPlay();
}
else
{
Node* rightTree = n->getRight();
if (rightTree != NULL)
{
return get(rightTree);
}
else
{
Node* leftTree = n->getLeft();
if (leftTree != NULL)
{
return get(leftTree);
}
}
}
}
}
bool BST::add(int k, int x, int y)
{
return add(root, k, x, y);
}
int BST::remAll()
{
int number = remAll(root);
root = NULL;
return number;
}
Button BST::get()
{
return get(root);
}
当我运行程序时,未处理的异常指向:
int Node::getKey()
{
return key;
}
在BST的add方法中使用。