从平衡树中递归删除节点

时间:2017-04-25 02:15:43

标签: algorithm recursion data-structures

我正在使用一棵红黑树,我的插入工作正常,我的删除似乎工作正常;但是,如果我在数千个条目上运行我的程序,在删除几百个之后,树就会变为无效,然后程序崩溃。我有一个Node类来处理插入和删除。我正在使用递归函数来处理删除过程后的修复。最终,当我的程序删除节点时,在此处调用此行时会崩溃:

else if (isBlack(w->getLeft()) && isBlack(w->getRight())) { // handles case where siblings left and right children are black (or NULL)
    w->setColor(false); // red is false; black is true
    x = p;
    p = p->getParent();
    delProcess(root, x, p, z);
}

错误消息是thisnullptr - isBlack()上确切地称呼this was 0xCCCCCCCCthis。我有一个有效性检查器,确保每次插入和删除都有效,我注意到,在我的程序崩溃nullptrdelProcess()之前,有效性检查开始一直失败。有人可以查看我的w方法,该方法可以在删除后处理修复问题吗?递归函数看起来没问题吗?我已经多次使用它,我似乎无法在程序中找到错误。似乎兄弟(OptionsViewController)节点在某个时刻结束为null:https://pastebin.com/BsByvCfV

0 个答案:

没有答案