AVL树类(C ++)

时间:2015-04-25 14:17:51

标签: c++ tree nodes avl-tree

所以我想用C ++制作一个AVL树。我使用一个类来创建节点和其他函数的类(instert,delete等)。当我想制作一棵以上的树时,我决定我需要做更多的根(每棵树一根)。问题是当我在main内声明新根时。当我在外面宣布它似乎工作正常。

avlNode:

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

avlTree :: insert implementation:

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;
}

1 个答案:

答案 0 :(得分:1)

// 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;

初始化那些指针。
您还需要初始化int item中的main,大概是0

int item = 0;