Class 用于 AVL 树 (C++)

Class for AVL trees (C++)

所以我想用 C++ 制作一个 AVL 树。我使用 class 制作节点,使用 class 制作其余功能(插入、删除等)。当我想制作不止一棵树时,我决定需要制作更多的根(每棵树一个)。问题是当我在 main 中声明新根时。当我在外面声明它时,它似乎工作正常。

avlNode:

class avl_node
{
public:
    int data;
    avl_node *left;
    avl_node *right;
}*root;

avlTree::insert 实现:

avl_node* avlTree::insert(avl_node* root, int item)
{
    if (root == NULL) {
        root = new avl_node;
        root->data = item;
        root->left = NULL;
        root->right = NULL;
        return root;
    }
    if (item < root->data) {
        root->left = insert(root->left, item);
    }
    else if (item > root->data) {
        root->right = insert(root->right, item);
    }
    else if (item == root->data) {
        cout << "this exists" << endl;
    }
    root = balance(root);
    return root;
}

主要功能:

int main()
{
    avl_node* roott;
    int item;   
    avlTree avl;
    avlTree kk;               
    root = avl.insert(root, item);          
    roott = kk.insert(roott, item);
    kk.display(roott, 1);
    return 0;
}
// in main
root = avl.insert(root, item);

// in avlTree::insert
avl_node* avlTree::insert(avl_node* root, int item) {
    if (root == NULL) { // <- Here

Here,您正在使用未初始化的 ::root。此时,::root 指向某个随机地址,这不是您想要的。

}*root = NULL;

avl_node* roott = NULL;

初始化那些指针。
您还需要将 main 中的 int item 初始化为 0.

int item = 0;