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);
        
        
        
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: