Well, why I can partially understand that there could be different strategies for comparison, I honestly think that traverse a sub-tree is a rather "standard" operation. It seems to me a matter of taste having it as an instance method or an external utility. My gut-feeling is that it feels right and more OO to have it as a method, but I realize that is difficult to bring objective arguments at the table.