创建avl树,其中每个节点指向另一个avl树

时间:2018-05-19 09:17:46

标签: c++ pointers data-structures tree avl-tree

我有以下输入txt文件

   id    element
    0    1
    0    3
    1    0
    1    1
    1    3
    2    2
    2    4
    3    4
    4    1

我想将数据整理到AVL树中。我的第一个想法是创建一个IDL的AVL树,然后第一个树中的每个ID节点将包含一个指向另一个AVL树的指针,其中将存储元素。

然后我想我可以通过创建指向此ID链接到的节点的指针的AVL树来实现此目的。这意味着我必须向节点的每个节点添加另一个指向节点的指针。该附加指针将链接到一个树,该树包含包含指向包含所需链接ID的主树节点的指针的节点。

以下是我的AVL树方法,它们工作正常。在struct avl_node_id中,我想我会添加一个指向另一个AVL树根的指针。但是我不知道如何实际实现这一切。

class AVLTree
{
    public:
        AVLTree();
        void readFile();
        void printToScreen();

        struct avl_node
        {
            int data;
            struct avl_node *left;
            struct avl_node *right;
        }*root;

        struct avl_node_id
        {
            struct avl_node **root;
            int data;
            struct avl_node *left;
            struct avl_node *right;
        }*id_root;

        int height(avl_node *);
        int diff(avl_node *);
        avl_node *rr_rotation(avl_node *);
        avl_node *ll_rotation(avl_node *);
        avl_node *lr_rotation(avl_node *);
        avl_node *rl_rotation(avl_node *);
        avl_node* balance(avl_node *);
        avl_node* insert(avl_node *, int );
        void display(avl_node *, int);
        void inorder(avl_node *);
    private:
        int n,m;
};

以下是读取文件并将ID插入初始树

的代码
void AVLTree::readFile()
{
    ifstream read("input2.txt");
    while(read>>n>>m){
        id_root = insert(id_root, n);
    }
}

AVLTree::avl_node *AVLTree::insert(avl_node *root, int value)
{
    if (root == NULL)
    {
        root = new avl_node;
        root->data = value;
        root->left = NULL;
        root->right = NULL;
        return root;
    }
    else if (value < root->data)
    {
        root->left = insert(root->left, value);
        root = balance (root);
    }
    else if (value > root->data)
    {
        root->right = insert(root->right, value);
        root = balance (root);
    }
    return root;
}

0 个答案:

没有答案