【问题标题】:Class for AVL trees (C++)AVL 树的类 (C++)
【发布时间】:2015-04-25 14:17:50
【问题描述】:

所以我想用 C++ 创建一个 AVL 树。我使用了一个类来制作节点,并使用一个类来完成其余的功能(插入、删除等)。当我想制作不止一棵树时,我决定我需要制作更多的根(每棵树一个)。问题是当我在main 中声明新根时。当我在外面宣布它似乎工作正常。

avlNode:

class avl_node
{
public:
    int data;
    avl_node *left;
    avl_node *right;
}*root;

avlTree::插入实现:

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;
}

【问题讨论】:

  • 有什么问题?
  • 我不明白你的问题。
  • @Jenny 我无法发现任何avl_node* 指针的内存分配。
  • 当我写这个 avl_node *roott;在主要程序停止工作,但当我在外面写它工作正常
  • 贴出avlTree::insert的实现。

标签: c++ tree nodes avl-tree


【解决方案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;

初始化这些指针。
你还需要在你的main中初始化int item,大概是0

int item = 0;

【讨论】:

  • 是的,这似乎可以解决问题。谢谢。
  • @Jenny 如果答案解决了你的问题,请采纳。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多