// pre-order traversal
private void ReadRecursively(DataInput @in, TernaryTreeNode node)
{
node.splitchar = @in.ReadString().First();
sbyte mask = (sbyte)@in.ReadByte();
if ((mask & HAS_TOKEN) != 0)
{
node.token = @in.ReadString();
}
if ((mask & HAS_VALUE) != 0)
{
node.val = Convert.ToInt64(@in.ReadLong());
}
if ((mask & LO_KID) != 0)
{
node.loKid = new TernaryTreeNode();
ReadRecursively(@in, node.loKid);
}
if ((mask & EQ_KID) != 0)
{
node.eqKid = new TernaryTreeNode();
ReadRecursively(@in, node.eqKid);
}
if ((mask & HI_KID) != 0)
{
node.hiKid = new TernaryTreeNode();
ReadRecursively(@in, node.hiKid);
}
}