public boolean equals(Object o) { if (!(o instanceof ITree)) return false; ITree t = (ITree) o; if (!((elem == null && t.root() == null) || elem.equals(t.root()))) return false; return (Arrays.equals(subTrees, t.getSubTrees())); }