public static (long offset, long length) SerializeTree( VectorNode node, Stream indexStream, Stream vectorStream, Stream postingsStream, IStringModel tokenizer) { var stack = new Stack <VectorNode>(); var offset = indexStream.Position; if (node.Vector.Count == 0) { node = node.Right; } while (node != null) { SerializePostings(node, postingsStream); node.VectorOffset = tokenizer.SerializeVector(node.Vector, vectorStream); SerializeNode(node, indexStream); if (node.Right != null) { stack.Push(node.Right); } node = node.Left; if (node == null && stack.Count > 0) { node = stack.Pop(); } } var length = indexStream.Position - offset; return(offset, length); }