Class 用于 AVL 树 (C++)
Class for AVL trees (C++)
所以我想用 C++ 制作一个 AVL 树。我使用 class 制作节点,使用 class 制作其余功能(插入、删除等)。当我想制作不止一棵树时,我决定需要制作更多的根(每棵树一个)。问题是当我在 main
中声明新根时。当我在外面声明它时,它似乎工作正常。
avlNode:
class avl_node
{
public:
int data;
avl_node *left;
avl_node *right;
}*root;
avlTree::insert 实现:
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;
}
// 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;
初始化那些指针。
您还需要将 main
中的 int item
初始化为 0
.
int item = 0;
所以我想用 C++ 制作一个 AVL 树。我使用 class 制作节点,使用 class 制作其余功能(插入、删除等)。当我想制作不止一棵树时,我决定需要制作更多的根(每棵树一个)。问题是当我在 main
中声明新根时。当我在外面声明它时,它似乎工作正常。
avlNode:
class avl_node
{
public:
int data;
avl_node *left;
avl_node *right;
}*root;
avlTree::insert 实现:
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;
}
// 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;
初始化那些指针。
您还需要将 main
中的 int item
初始化为 0
.
int item = 0;