【问题标题】:LR in AVL treesAVL 树中的 LR
【发布时间】:2013-12-27 17:38:30
【问题描述】:

我只是在处理 AVL 树、插入、删除和其他方法,所以现在我的左旋转有问题,当节点不是根时(也就是节点的父节点不等于零)。所以,我方法的一部分,实际上它的正确开头是这样的:

void LR (Node* &c)
{
    if (c->_parent != 0)
    {
        if ( c == c->_parent->_left)
        {
            c->_parent->_left = c->_right;
        }
        else
        c->_parent->_right = c->_right;
        c->_right->_parent = c->_parent;
    }
etc. etc.

所以,当我有一个节点 c,它的键为 389,父非零和右子非零,键等于 390,我的代码转储并在此指令之后显示:

    c->_parent->_left = c->_right;

我的右孩子,c->_right 变为空:/ 我不明白。有人吗?

【问题讨论】:

  • 使用调试器解决问题。
  • 我做到了,它显示相同。我在那条指令之后删除了 c->_right ! :(

标签: c++ avl-tree


【解决方案1】:

如果使用调试器c 不为零且c->right 在程序出现分段错误时不为零,则检查您正在调试的程序是否已正确编译。

观察相关变量的值变化并逐步执行,直到变量变为有效。

【讨论】:

  • 我刚刚意识到我的 LR 函数的参数是一个引用,所以这就是我丢失地址的原因:D c->_parent->_left 与 c :D 相同,所以我基本上做到了this : c = c->_right :D 现在我已经更正了它。
【解决方案2】:

我的 LR 函数的参数是一个引用,所以这就是我丢失地址的原因:D c->_parent->_left 与 c :D 相同,所以我基本上是这样做的:c = c->_right : D 现在我已经更正了它,它可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2011-02-13
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多