C ++实现AVL树

时间:2018-12-08 06:17:00

标签: c++ avl-tree

我有一个 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中没有任何内容时实现add函数的实现

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

主要功能:

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 :(得分:2)

    AVLNode newNode(val);
    root = &newNode;      

newNode是局部变量,您可以使用指向此var的指针,但是newNodeadd方法的结尾超出了作用域,因此您有悬空的指针。您需要通过new运算符在堆上分配AVLNode:

    root = new AVLNode(val);