这里是引用
https://blog.csdn.net/weixin_40037053/article/details/89947885
这里应用了这个的博客,写的很棒,我讲一下自己的理解吧。
左旋的代码:
public void leftRonate(RBNode<T, D> x) {
//右孩子
RBNode<T, D> y = x.rightChild;
if (y.leftChild != null) {
//如果Y的左分支不为空,就先让它认x为父(此时x还没有曾任它是它孩儿,单方面)
y.leftChild.parent = x;
}
x.rightChild = y.leftChild;//认了Y的左分支为右孩子,完成了X对Y的左分支的收养
y.leftChild = x;//Y的左分支空出来了,就让X来委屈来了,但是X还没有承认
//当前的父亲变成了Y的父亲
y.parent = x.parent;//Y又霸占了X的父亲,但是父亲还没有给他一个位置。
//父亲给了Y位置,完成了对Y的收养。
if (x.parent != null) {
if (x.parent.leftChild == x) {
x.parent.leftChild = y;
} else {
x.parent.rightChild = y;
}
} else {
this.root = y;
}
x.parent = y;//X承认Y是它父亲,完成对X的收养。
}
总结就是:
1、收养要双方同意,同意过后就要与亲生父亲断开联系
2、双方没有确定关系之前还可以当海王