public static boolean treeEqual( NodeStack baseStack, Node base, NodeStack forkStack, Node fork, Comparator comparator) { if (base == Node.Null) { return fork == Node.Null; } else if (fork == Node.Null) { return base == Node.Null; } else { DiffIterator iterator = new DiffIterator( base, baseStack = new NodeStack(baseStack), fork, forkStack = new NodeStack(forkStack), Lists.newArrayList(Interval.Unbounded).iterator(), true, comparator); DiffIterator.DiffPair pair = new DiffIterator.DiffPair(); boolean result = true; while (iterator.next(pair)) { if (!Node.valuesEqual(pair.base, pair.fork)) { result = false; break; } } baseStack.popStack(); forkStack.popStack(); return result; } }