import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
static class Node {
Node parent;
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
this.parent = null;
this.left = null;
this.right = null;
}
}
static Node Insert(Node node, int value) {
if (node == null) {
return new Node(value);
} else {
if (value < node.value) {
node.left = Insert(node.left, value);
node.left.parent = node;
} else if (value > node.value) {
node.right = Insert(node.right, value);
node.right.parent = node;
}
}
return node;
}
static Node rot_node;
static void preOrder(Node node, int value) {
if (node == null) return;
if (node.value == value) {
rot_node = node;
return;
}
preOrder(node.left, value);
preOrder(node.right, value);
}
static void preOrder(Node node) {
if (node == null) return;
System.out.println(node.value);
preOrder(node.left);
preOrder(node.right);
}
static Node rightRotation(Node node){
Node parent = node;
Node left = node.left;
Node leftright = node.left.right;
// 1. root를 left로 설정
Node root = left;
Node GrandP = parent.parent;
// 2. leftright를 방금 전 root에 연결
// parent.left = leftright;
// leftright.parent = parent;
parent.left = leftright;
// if (leftright != null) {
// leftright.parent = parent;
// }
// 3. 새로운 root의 오른쪽에 parent를
root.right = parent;
// 4. 새로운 root의 부모를 원래 이 트리의 부모로
root.parent = GrandP;
//5. 그럼 추가로..GrnadP에 대한 설정도 해야하나? 이건 근데 문제 공략에 없던거같기 한데 로직상 필요하긴 함
if (GrandP != null) {
if(GrandP.left == parent) GrandP.left = root; else if (GrandP.right == parent) GrandP.right = root;
}
return root;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
Node root = null;
for (int i=0; i<N; i++) {
int t =Integer.parseInt(st.nextToken());
root = Insert(root, t);
}
int a = Integer.parseInt(br.readLine());
preOrder(root, a);
rot_node = rightRotation(rot_node);
if(rot_node.parent == null) {
root = rot_node;
}
preOrder(root);
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: