我想向左旋转以 node 为根的子树N(见左图)而不操纵其 parent P。
P P P
\ | \
N | R R
/ \ |/ /
L R N N
/ /
L L
如果我愿意在一个函数中使用它,那将N作为一个参数:
void rotate_left(Node *node);
我最终会在中间图上呈现一棵树。问题是尽管旋转P仍然指向N,而不是指向R(左图)。如果函数没有指向的指针,P如何在R旋转结束时指向?rotate_left()P
我想到了三种方法:
Let
rotate_left()引用指向节点的指针Nvoid rotate_left(Node * &node);然后调用,将其传递给(即 )
rotate left()的右孩子:PNrotate_left(P->right_child);将对象放在旋转结束时
R的内存地址下N将父 P 传递给
rotate_left():void rotate_left(Node *parent, Node *child);
解决方案 (2) 和 (3) 听起来不太好,在解决方案 (1) 中,您需要知道P调用rotate_left().