c++ - c语言 指针问题

浏览:35日期:2023-04-30

问题描述

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

运行前后截图:c++ - c语言 指针问题c++ - c语言 指针问题

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

问题解答

回答1:

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

def __right_rotate(self, x):if not x.left: raises(’cannot rotate from nil’)y = x.leftx.left = y.rightif y.right: y.right.parent = xy.parent = x.parentif not x.parent: self.root = yelif x.is_left(): x.parent.left = yelse: x.parent.right = yy.right = xx.parent = y

相关文章: