>  Q&A  >  본문

c++ - 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)
    {
        。。。。
    }


};
阿神阿神2712일 전517

모든 응답(1)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-17 13:53:46

    给一个右旋的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

    회신하다
    0
  • 취소회신하다