function treeforeach_tail(tree, node_id, fun) {

    // Execute fun on all nodes of the subtree tree[node_id]
    return (function sub(_tree, _node_id, _fun, _from_below) {

        var _node = _tree[_node_id];

        if (! _from_below) { // _fun is called one and only one time per node
            _fun(_tree, _node_id);
            if (_node.firstChild)  return sub(_tree, _node.firstChild, _fun, false);
        }

        if (_node_id === node_id) return; // Done
        if (_node.nextSibling)    return sub(_tree, _node.nextSibling, _fun, false);          
        if (_node.parent)         return sub(_tree, _node.parent,      _fun, true);

        return;

    })(tree, node_id, fun, false);

}
