private HashTreeV2(int key, V value, HashTreeV2 <V> left, HashTreeV2 <V> right)
 {
     Key    = key;
     Value  = value;
     Left   = left;
     Right  = right;
     Height = 1 + (left.Height > right.Height ? left.Height : right.Height);
 }
 private HashTreeV2 <V> With(HashTreeV2 <V> left, HashTreeV2 <V> right)
 {
     return(new HashTreeV2 <V>(Key, Value, left, right));
 }