private static bool IsMirror(INode reg, INode rev)
{
if (reg.IsLeaf() ^ rev.IsLeaf())
{
throw new Exception("Mirrored nodes are not at the same height");
}
if (reg.IsLeaf() && rev.IsLeaf())
{
Assert.IsTrue(reg.Size() == rev.Size());
Assert.IsTrue(reg.Leaf().Orientation == Enumeration.Opposite(rev.Leaf().Orientation));
Assert.IsTrue(reg.LeftEdge().Direction == Enumeration.Opposite(rev.RightEdge().Direction));
return true;
}
return IsMirror(reg.Left(), rev.Right()) && IsMirror(reg.Right(), rev.Left());
}