二叉树不插入

Binary tree doesn't inserting

我要写一个集合——二叉树,使用多态性。它的根必须是抽象对象class。我有 class 个 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;
};

我有两种数据类型——整数和日期作为 class“对象”的子项。不知道应该写哪些细节.......

这里有一个问题:

void insertNode(Node *node, Node *elem) {
  if (node == nullptr) node = elem;
  else {
  ...
  }
}

第一次尝试添加节点时,node 等于 root,因此它等于 nullptr。所以这个函数设置 node 等于 elem,然后退出。 但是node是局部变量,属于函数。函数修改了变量的值,然后函数退出,变量被遗忘。 root 的值仍然是 nullptr.

有几种方法可以解决这个问题。这是一个:

Node* insertNode(Node *node, Node *elem) {
  if (node == nullptr) return elem;

  if (equal(node->o, elem->o) < 0)
    node->left = MyInsertNode(node->left, elem);
  else node->right = MyInsertNode(node->right, elem);

  return node;
}

void add(object *obj) {
  ...
  root = insertNode(root, n);
}

还有其他问题。我建议您在尝试树之前,再做一些更简单的练习(例如链表)。