C ++ реализует AVL Tree - PullRequest
       8

C ++ реализует AVL Tree

0 голосов
/ 08 декабря 2018

У меня есть класс TreeSet , описывающий дерево в c ++:

class TreeSet
{
private:
    AVLNode * root;
    int count;

protected:
    void clearRec(AVLNode*root);


public:
    TreeSet();
    ~TreeSet();
    void clear();
    // print out the set in ascending order
    friend ostream& operator<<(ostream& os, const TreeSet& t);


    int add(int val);
}

и класс узла AVL для представления узла AVl:

class AVLNode {
public:
    int key;            // data 
    AVLNode* left;      // left child
    AVLNode* right;     // right child
    int balance;        // balance factor

    AVLNode(int key) {
        this->key = key;
        left = right = NULL;
        balance = 0;
    }
    AVLNode(int key, int balance) {
        this->key = key;
        this->balance = balance;
        left = right = NULL;
    }
};

Вот моя реализация функции добавления, когда в TreeSet нет ничего

int TreeSet::add(int val) {
    if (root == NULL) {
        AVLNode newNode(val);
        root = &newNode;        
        count++;
    }
}

Функция main :

int main() {
    TreeSet set, temp, *subSet;
    ifstream ifs;
    ifs.open("input.txt");
    char command;
    int val;
    try
    {
        while (ifs >> command) {
            switch (command) {
            case 'a': // add an element to the set
                ifs >> val;
                set.add(val);
                break;
            }
        }
    }
}

Но когда у меня естьTXT-файл со строкой 4

не выводит 4 на экран.Можете ли вы помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 08 декабря 2018
    AVLNode newNode(val);
    root = &newNode;      

newNode - локальная переменная, вы берете указатель на эту переменную, но newNode выходит из области видимости в конце метода add, поэтому у вас есть висячий указатель.Вам нужно выделить AVLNode в куче, оператором new:

    root = new AVLNode(val);      
...