在treap中添加错误
Add error in treap
我已经实现了treap,它有add方法。所以,当我尝试在主要的
int main(){
nodeptr root=NULL;
treap bst;
bst.add(root, 10);
// bst.add(root, 9);
// bst.add(root, 8);
if(bst.find(root, 10)){
cout<<"OMG";
}
}
它在nv->x=x;
线上有一个错误,所以,有所有添加的代码
void treap::add(nodeptr &p, int x){
nodeptr nv, l, r;
nv->x=x;
nv->y=random();
nv->left=NULL;
nv->right=NULL;
split(p, x, l, r);
p=merge(merge(l, nv), r);
}
查找
bool treap::find(nodeptr &p, int x){
if(!p){
return false;
}
if(p->x == x){
return true;
}
else if(x< p->x){
return find(p->left, x);
}
else{
return find(p->right, x);
}
}
对于合并
nodeptr treap::merge(nodeptr l, nodeptr r){
nodeptr result;
if (!l){
result=r;
}
else if(!r){
result=l;
}
else if(l->cnt > r->cnt){
l->right=merge(l->right, r);
result=l;
}
else{
r->left=merge(l, r->left);
result=r;
}
return result;
}
以及我如何定义treap:
typedef struct node *nodeptr;
struct node{
int x;
long y;
node* left ;
node* right ;
int cnt;
node(int key=0, long prior=0): x(key), y(prior), left(NULL), right(NULL), cnt(0) {}
};
class treap{
public:
int cnt( nodeptr &p);
bool find(nodeptr &p, int x);
void update_cnt(nodeptr &p);
void split(nodeptr &p, int x, nodeptr &l, nodeptr &r);
void insert(nodeptr &p, nodeptr &q);
nodeptr merge(nodeptr l, nodeptr r);
void deletes(nodeptr &p, int x);
void add(nodeptr &p, int x);
};
你能解释一下为什么这里有这个错误吗?提前谢谢。很抱歉,如果问题是中午,我是oop的新手。
在第行:nodeptr nv, l, r;
中,您只创建了一个指向节点的指针,它没有指向任何有用的东西。您应该为节点分配内存,并使该指针指向已分配的内存。nodeptr nv = new node;
(确保您delete
的内存)更好的是,您可能希望创建控制该节点生存期的对象,而不是手动处理内存。
相关文章:
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 尝试将 boost::stacktrace 添加到 CMake 项目时出现构建错误
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- C#WPF和C++/CLI以及C++在C++/CLI中添加外部库错误
- 添加qt-libs后出现编译错误
- 试图添加两个矢量,但添加顺序错误
- 为什么自删除的全局 Vulkan 实例仅在添加层时才导致段错误?
- 添加可变参数函数的错误结果
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- c++ IF 语句执行,但添加 ELSE 会显示错误
- c++ 添加具有写入文件错误的文本变量
- C 实现CNN错误添加符号:命令行中缺少DSO
- libopencv_core.so.2.4:错误添加符号:命令行中缺少DSO
- C++输出错误(添加了新问题)
- 群集不是类型 + 群集未命名类型错误.添加(群集 *)出错.不能有集群 *