c语言 指针问题

对有两个节点的二叉树右旋时出错(根节点key为8,左子树key为5),想对8右旋,运行到注释哪里就出问题了,希望root->parent指向的地址改为root_old->parent指向的地址,但是被指针弄晕了,当前root->parent指向的是root本身,执行过后就变成root就变null了,麻烦大家看看,帮我弄清楚

运行前后截图:
图片描述
图片描述

    struct node
    {
        T key;
        node *left, *right,*parent;
    }*root;


    void rotateR(node *&root)
    {
        node *root_old = root;    
        root = root->left;
        root_old->left = root->right;
        root->right= root_old;
        root->parent= root_old->parent; //
        root_old->parent=root;
        root_old->left->parent = root_old;
    }

    void splay(node *n)
    {
        。。。。
    }


};
阅读 2.7k
1 个回答

给一个右旋的python实现,对比一下你的应该可以看出问题
x 相当于你的 old root
y 相当于 root

    def __right_rotate(self, x):
        if not x.left:
            raises('cannot rotate from nil')
        y = x.left
        x.left = y.right
        if y.right:
            y.right.parent = x
        y.parent = x.parent
        if not x.parent:
            self.root = y
        elif x.is_left():
            x.parent.left = y
        else:
            x.parent.right = y
        y.right = x
        x.parent = y
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题