首页 > 解决方案 > 我的 avl 树 add() 函数有什么问题?

问题描述

这是我在这里的第一篇文章。我正在学习 avl 树,现在尝试编写一个简单的递归添加函数。我不知道我的代码有什么问题。我很高兴您有时间查看我的功能并告诉我该怎么做。

类树只有一个名为 root 的私有指针。类节点有两个受保护的指针(左和右)

编译器根本没有给出任何错误,这让我更加困惑。

void add(T toAdd, Node <T> *ptr)
    {
       if(ptr==nullptr) //first ptr is root
        {
            ptr=new Node <T> (toAdd);

            return;
        }

        //everything below is not working. I dont know why
        if(toAdd<ptr->getVal())
        {
            add(toAdd,ptr->left);
        }
        else
        {
            add(toAdd,ptr->right);
        }
    }

在添加一些对象之后,我的第二个函数 member() 检查给定节点是否存在,它告诉树中没有任何内容。

成员函数:

bool member(T val)   //check if val node exist
    {
        if(root==nullptr)
        {
            cout<<"tree is empty"<<endl;
            return false;
        }

        Node <T> *current=root;

        while(current)
        {
            if(current->getVal()==val) return true;

            if(val<current->getVal())
            {
                current=current->left;
            }
            else current=current->right;
        }
        return false;
    }

改进的成员函数(递归):

bool member(T val, Node <T> *ptr) //recursion
    {
        if(ptr==nullptr)
        {
            cout<<"tree is empty"<<endl;
            return false;
        }
        else if(ptr->getVal()==val)
        {
            return true;
        }
        else
        {
            if(val<ptr->getVal()) member(val,ptr->right);
            else member(val,ptr->left);
        }
    }

主功能:

int main()
{

    Tree <int> avlTree;

    int n,value;

    cin>>n;

    for(int i=0;i<n;i++)
    {
        cin>>value;
        avlTree.add(value,avlTree.getRoot());
    }

    avlTree.member(7);

    return 0;
}

getRoot 函数只返回根指针。如果有人帮助我,我会很高兴。

标签: c++avl-tree

解决方案


推荐阅读