所以我想用C ++制作一个AVL树。我使用一个类来创建节点和其他函数的类(instert,delete等)。当我想制作一棵以上的树时,我决定我需要做更多的根(每棵树一根)。问题是当我在main
内声明新根时。当我在外面宣布它似乎工作正常。
avlNode:
class avl_node
{
public:
int data;
avl_node *left;
avl_node *right;
}*root;
avlTree :: insert implementation:
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;
}
答案 0 :(得分:1)
// 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;
初始化那些指针。
您还需要初始化int item
中的main
,大概是0
。
int item = 0;