Не удаляйте корни t1 и t2, когда вы назначаете t1.root для p.left и t2.root для p.right для задачи, которую она выполнила.
Это потому, что Java использует объекты t1 и t2 для ссылки на p.left и p.right
public void attach(Node p, BinaryTree t1, BinaryTree t2){
if(p.left ==null){
p.left=t1.root;
}
if(p.right==null){
p.right=t2.root;
}
else
System.out.print("is not leaf");
}