public static <T> BinaryTree<T> LCA(BinaryTree<T> n, BinaryTree<T> a, BinaryTree<T> b) {
        if(n == null) { // empty subtree.
            return null;
        } else if(n == a || n == b) {
            return n;
        }

        BinaryTree<T> l_res = LCA(n.getLeft(), a, b), r_res = LCA(n.getRight(), a, b);
        if(l_res != null && r_res != null) {
            return n;
        } else {
            return l_res != null ? l_res : r_res;
        }
    }