import java.util.*;
import java.lang.*;
import java.io.*;


class Main {
    static class Node {
        Node left, right; 
        int value; 
        Node(int value) {
            this.value = value;
            this.left = null;
            this.right = null;
        }
    }

    public static Node insert(Node node, int value) {
        if (node == null) {
            return new Node(value);
        }

        if(node.value > value) {
           node.left = insert(node.left, value);
        }
        
        if(node.value < value) {
           node.right = insert(node.right, value);
        }
        return node;
    }

    public static Node erase(Node node, int value) {
        if (node == null) return null;

        if (value < node.value) {
            node.left = erase(node.left, value);
        } else if (value > node.value) {
            node.right = erase(node.right, value); 
        } else {
            if (node.left == null) return node.right;
            if (node.right == null) return node.left; 
            node.value = minValue(node.right);
            node.right = erase(node.right, node.value);
        }
        return node;        
    }

    private static int minValue(Node node) {
        int minV = node.value; 
        while (node.left != null) {
            minV = node.left.value; 
            node = node.left;
        }
        return minV;
    }
    
    static void preOrder(Node node){
        if (node == null) return;
        System.out.println(node.value);
        preOrder(node.left);
        preOrder(node.right);
    }
    
    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 a = Integer.parseInt(st.nextToken());
            root = insert(root, a);
        }

        int M = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        
        for (int j=0; j<M; j++) {
            int t = Integer.parseInt(st.nextToken());
            root = erase(root, t);
        }

        preOrder(root);
         
        
    }
}

Embed on website

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