我有以下输入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;
}