【发布时间】:2022-01-14 20:05:41
【问题描述】:
我必须使用多态性编写一个集合 - 二叉树。它的根必须是抽象类的对象。我有类 Node 和 Btree,但函数“add”不能正常工作。我究竟做错了什么..?请帮忙
class Node {
public:
Node() {
o = nullptr;
left = nullptr;
right = nullptr;
}
Node(object* obj) {
o = obj;
left = nullptr;
right = nullptr;
}
friend class Btree;
private:
object *o;
Node *left;
Node *right;
};
class Btree {
public:
Btree() {
count = 0;
root = nullptr;
}
void deleteNotes(Node *n) {
if (!n) return;
delete n;
delete n->left;
delete n->right;
}
Node* getRoot() {
return root;
}
Node* getLeft(Node* n) {
return n->left;
}
Node* getRight(Node* n) {
return n->right;
}
object* getData(Node *n) {
return n->o;
}
void add(object *obj) {
Node *n = new Node;
n->o = obj;
if (!n) {
return;
}
insertNode(root, n);
}
void insertNode(Node *node, Node *elem) {
if (node == nullptr) node = elem;
else {
if (equal(node->o, elem->o) < 0)
insertNode(node->left, elem);
else insertNode(node->right, elem);
}
}
Node *search(object *obj) {
return searchNode(root, obj);
}
Node *searchNode(Node *node, object *obj) {
if (equal(node->o, obj) == 0) return node;
else {
if (equal(node->o, obj) < 0) {
searchNode(node->left, obj);
}
else {
searchNode(node->right, obj);
}
}
}
void show() {
showNode(root);
}
void showNode(Node *n) {
if (n != nullptr) {
showNode(n->left);
cout << n->o->uploadInString() << "\n";
showNode(n->right);
}
}
void deleteNodes(Node *n) {
if (!n) return;
delete n;
delete n->left;
delete n->right;
}
~Btree() {
deleteNodes(root);
}
private:
int count;
Node *root;
};
我有两种数据类型——整数和日期作为“对象”类的子类。我不知道我应该写哪些细节............
【问题讨论】:
-
“无法正常工作。” -- 这涵盖了
add函数导致全球火山爆发激增的情况。换句话说,这种描述是没有用的。为什么你认为它不起作用?有什么症状?如果不是编译时错误或崩溃,那么简单测试用例的预期结果和实际结果是什么? -
“我不知道我应该写哪些细节” -- 你应该写足够的细节,以便有人可以从你的问题中复制代码,将该代码提供给编译器,并重现您的结果。您还应该争取足够的最少代码量。 (这被称为minimal reproducible example。)
标签: c++ binary-tree abstract-class