【发布时间】:2021-04-26 06:14:50
【问题描述】:
我为this task 编写了笛卡尔树的解决方案。
我的完整code
起初我遇到了非常令人困惑的问题。我有我的结构和两个功能。我需要在我的树上传递指针,做一些动作,然后我需要我的原始对象值,然后再将它传递给函数 calc。
struct item {
int prior;
long long key, sum;
item *l, *r;
item(long long key, int prior) {
this->key = key;
this->sum = key;
this->prior = prior;
this->l = nullptr;
this->r = nullptr;
}
};
typedef item *pitem;
long long calc(pitem &t, long long l, long long r) {
pitem first = nullptr, second = nullptr, out = nullptr;
split(t, l - 1, first, second);
split(second, r, out, first);
return sum(out);
}
*附加功能拆分
void split(pitem t, long long key, pitem &l, pitem &r) {
if (!t) {
l = r = nullptr;
return;
}
if (key < t->key)
split(t->l, key, l, t->l), r = t, update_info(r);
else
split(t->r, key, t->r, r), l = t, update_info(l);
update_info(t);
}
起初我试图在函数中传递没有“&”的指针。它没有奏效。之后我尝试创建具有相同值的临时值并在函数中传递这个新对象的指针,但它不起作用甚至更多:我在指针树上的原始对象当时也发生了变化..我用很多事情,但他们没有工作。这就像我尝试创建临时值而不是更改 *t 指针上的主对象,但它仍然会随着它们而改变。 请帮帮我,我在这个问题上只花了你 4 块钱,但仍然不知道该怎么做......
【问题讨论】:
-
“起初我试图在函数中传递没有“&”的指针。它没有奏效。” 那么为什么不放弃尝试这样做呢。你知道通过引用传递参数的作用吗?
标签: c++ object pointers structure