AVL树代码中的RE错误:空指针处理
这段代码中,出现RE错误的原因是没有对空指针进行判断和处理。
在第1行代码中,如果root为空指针,那么在访问'root->sz'时会出现RE错误。
在第11行代码中,如果root的左子树和右子树都为空指针,那么在访问'root->l'和'root->r'时会出现RE错误。
要解决这个问题,可以在相关代码中添加对空指针的判断和处理。
修正后的代码如下:
void erase(int val, nd*& root) // O(logn) 应先用isErasable判断
{
if (root == nullptr) return; // 对空指针进行判断和处理
root->sz--;
if (val == root->val)
{
root->cnt--;
if (root->cnt > 0);
else if (root->l != nullptr && root->r != nullptr)
{
nd* newNode = root->r;
while (newNode->l != nullptr)
{
newNode = newNode->l;
}
root->val = newNode->val;
root->cnt = newNode->cnt;
erase(root->val, root->r);
}
else
{
nd* toErase = root;
root = (root->l != nullptr) ? root->l : root->r;
delete toErase;
}
}
else if (val < root->val) erase(val, root->l);
else if (val > root->val) erase(val, root->r);
balance(root);
}
原文地址: https://www.cveoy.top/t/topic/pism 著作权归作者所有。请勿转载和采集!