我想向左旋转以 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()
引用指向节点的指针N
void rotate_left(Node * &node);
然后调用,将其传递给(即 )
rotate left()
的右孩子:P
N
rotate_left(P->right_child);
将对象放在旋转结束时
R
的内存地址下N
将父 P 传递给
rotate_left()
:void rotate_left(Node *parent, Node *child);
解决方案 (2) 和 (3) 听起来不太好,在解决方案 (1) 中,您需要知道P
调用rotate_left()
.