#include <stdio.h>
#include <stdlib.h>
typedef struct nodeType *node;
struct nodeType {
int value;
node left;
node right;
};
node node_new(int value, node left, node right) {
node n
= malloc(sizeof(struct nodeType
)); n->value = value;
n->left = left;
n->right = right;
return n;
}
void node_dump(node n, int c) {
int i;
if (n == NULL) {
return;
}
node_dump(n->right, c + 1);
for (i = 0; i < c; i++) {
}
node_dump(n->left, c + 1);
}
node rightRotate1(node a) {
node b = a->left;
a->left = b->right;
b->right = a;
return b;
}
node rightRotate2(node a) {
node e = a->left->right;
a->left->right = e->left;
e->left = a->left;
a->left = e->right;
e->right = a;
return e;
}
void rightRotate1Test(void) {
node e = node_new(3, NULL, NULL);
node d = node_new(1, NULL, NULL);
node b = node_new(2, d, e);
node c = node_new(5, NULL, NULL);
node a = node_new(4, b, c);
node_dump(a, 1);
b = rightRotate1(a);
node_dump(b, 1);
}
void rightRotate2Test(void) {
node g = node_new(5, NULL, NULL);
node f = node_new(3, NULL, NULL);
node e = node_new(4, f, g);
node d = node_new(1, NULL, NULL);
node b = node_new(2, d, e);
node c = node_new(7, NULL, NULL);
node a = node_new(6, b, c);
node_dump(a, 1);
e = rightRotate2(a);
node_dump(e, 1);
}
int main(void) {
rightRotate1Test();
rightRotate2Test();
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGVUeXBlICpub2RlOwpzdHJ1Y3Qgbm9kZVR5cGUgewogICAgaW50IHZhbHVlOwoJbm9kZSBsZWZ0OwoJbm9kZSByaWdodDsKfTsKCm5vZGUgbm9kZV9uZXcoaW50IHZhbHVlLCBub2RlIGxlZnQsIG5vZGUgcmlnaHQpIHsKCW5vZGUgbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGVUeXBlKSk7CgluLT52YWx1ZSA9IHZhbHVlOwoJbi0+bGVmdCA9IGxlZnQ7CgluLT5yaWdodCA9IHJpZ2h0OwoJcmV0dXJuIG47Cn0KCnZvaWQgbm9kZV9kdW1wKG5vZGUgbiwgaW50IGMpIHsKCWludCBpOwoJaWYgKG4gPT0gTlVMTCkgewoJCXJldHVybjsKCX0KCW5vZGVfZHVtcChuLT5yaWdodCwgYyArIDEpOwoJZm9yIChpID0gMDsgaSA8IGM7IGkrKykgewoJCXByaW50ZigiICAiKTsKCX0KCXByaW50ZigiJWRcbiIsIG4tPnZhbHVlKTsKCW5vZGVfZHVtcChuLT5sZWZ0LCBjICsgMSk7Cn0KCm5vZGUgcmlnaHRSb3RhdGUxKG5vZGUgYSkgewoJbm9kZSBiID0gYS0+bGVmdDsKCWEtPmxlZnQgPSBiLT5yaWdodDsKCWItPnJpZ2h0ID0gYTsKCXJldHVybiBiOwp9Cgpub2RlIHJpZ2h0Um90YXRlMihub2RlIGEpIHsKCW5vZGUgZSA9IGEtPmxlZnQtPnJpZ2h0OwoJYS0+bGVmdC0+cmlnaHQgPSBlLT5sZWZ0OwoJZS0+bGVmdCA9IGEtPmxlZnQ7CglhLT5sZWZ0ID0gZS0+cmlnaHQ7CgllLT5yaWdodCA9IGE7CglyZXR1cm4gZTsKfQoKdm9pZCByaWdodFJvdGF0ZTFUZXN0KHZvaWQpIHsKCW5vZGUgZSA9IG5vZGVfbmV3KDMsIE5VTEwsIE5VTEwpOwoJbm9kZSBkID0gbm9kZV9uZXcoMSwgTlVMTCwgTlVMTCk7Cglub2RlIGIgPSBub2RlX25ldygyLCBkLCBlKTsKCW5vZGUgYyA9IG5vZGVfbmV3KDUsIE5VTEwsIE5VTEwpOwoJbm9kZSBhID0gbm9kZV9uZXcoNCwgYiwgYyk7CgkKCXByaW50Zigi5Y+z44G45LiA6YeN5Zue6LuiXG4iKTsKCXByaW50ZigiICDlm57ou6LliY1cbiIpOwoJbm9kZV9kdW1wKGEsIDEpOwoJcHJpbnRmKCJcbiIpOwoJYiA9IHJpZ2h0Um90YXRlMShhKTsKCXByaW50ZigiICDlm57ou6LlvoxcbiIpOwoJbm9kZV9kdW1wKGIsIDEpOwoJcHJpbnRmKCJcbiIpOwp9Cgp2b2lkIHJpZ2h0Um90YXRlMlRlc3Qodm9pZCkgewoJbm9kZSBnID0gbm9kZV9uZXcoNSwgTlVMTCwgTlVMTCk7Cglub2RlIGYgPSBub2RlX25ldygzLCBOVUxMLCBOVUxMKTsKCW5vZGUgZSA9IG5vZGVfbmV3KDQsIGYsIGcpOwoJbm9kZSBkID0gbm9kZV9uZXcoMSwgTlVMTCwgTlVMTCk7Cglub2RlIGIgPSBub2RlX25ldygyLCBkLCBlKTsKCW5vZGUgYyA9IG5vZGVfbmV3KDcsIE5VTEwsIE5VTEwpOwoJbm9kZSBhID0gbm9kZV9uZXcoNiwgYiwgYyk7CgoJcHJpbnRmKCLlj7Pjgbjkuozph43lm57ou6JcbiIpOwoJcHJpbnRmKCIgIOWbnui7ouWJjVxuIik7Cglub2RlX2R1bXAoYSwgMSk7CglwcmludGYoIlxuIik7CgllID0gcmlnaHRSb3RhdGUyKGEpOwoJcHJpbnRmKCIgIOWbnui7ouW+jFxuIik7Cglub2RlX2R1bXAoZSwgMSk7CglwcmludGYoIlxuIik7Cn0KCmludCBtYWluKHZvaWQpIHsKCXJpZ2h0Um90YXRlMVRlc3QoKTsKCXJpZ2h0Um90YXRlMlRlc3QoKTsKCQoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKfQ==