I\'ve got the following code to find the lowest common ancestor (the lowest node that has both a and b as descendants):
public static Node LCA(Node root, Node a,
Does IData have the equality operator (==) defined? If not, you are just comparing the references and not the object themselves.
This explains it fairly well: http://www.ikriv.com/en/prog/info/dotnet/ObjectEquality.html