TreeNode GetNodeAtOffset (int offset)
{
if (offset == tree.Root.TotalLength)
return tree.Root.GetOuterRight ();
var node = tree.Root;
int i = offset;
while (true) {
if (node == null)
return null;
if (node.left != null && i < node.left.TotalLength) {
node = node.left;
} else {
if (node.left != null)
i -= node.left.TotalLength;
i -= node.LengthIncludingDelimiter;
if (i < 0)
return node;
node = node.right;
}
}
}