Do these fields have to be saved directly on a `Tree`?  Keeping `Tree` small and general makes it useful in more situations.  Some of these new fields seem very specific to certain cases.  If you use these fields together frequently maybe make a composite class like I did with `LocalTreeSpr`.

Is seems these fields could be stored on a separate SPR-like object:
```c++
Node *recomb_node;
double recomb_time;
Node *coal_node;
double coal_time;
```

Does `node_map` need to be stored on a tree?  Can it just be instantiated separately and passed to whatever method needs it?

It seems wasteful to store the nodes again on the tree just for postorder traversal.  My usual way of doing postorder traversal is to buildup an array in whatever function needs to do the traversal.  The traversal array can be passed to any function that needs it in order to reuse work.  By storing it on the tree, I feel it becomes the responsibility of the tree to keep it up to date, which might be hard to do if nodes are changing structure frequently.
```c++
ExtendArray<Node*> postnodes;
```

What do you think?