c++ - 我的 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 函数只返回根指针。如果有人帮助我,我会很高兴。
解决方案
推荐阅读
- ruby-on-rails - 如何禁用链接并仅在填写所有字段后才显示它
- neo4j - 在森林中寻找子树
- rust - 在闭包内使用外部变量的副本
- javascript - 如何使用 FormattedNumber 将对象转换为数字或字符串以使用 REACTJs 在反应工具提示中呈现?
- python - 如何解决python中的图例颜色问题?
- node.js - 查找查询中的 Mongoose If 语句
- haskell - 无法使用单个元素创建类型级列表
- android - 从android中的活动访问“Model.class”中的数据
- android - Android APK 不包含 MainActivity 类
- mysql - mysql json_contains 可以不区分大小写吗?