According to BIP-174, the tap_tree field must be:
One or more tuples representing the depth, leaf version, and script for a leaf in the Taproot tree, allowing the entire tree to be reconstructed. The tuples must be in depth first search order so that the tree is correctly reconstructed. Each tuple is an 8-bit unsigned integer representing the depth in the Taproot tree for this script, an 8-bit unsigned integer representing the leaf version, the length of the script as a compact size unsigned integer, and the script itself.
allowing serializing an empty tap tree tuple breaks the “one or more"ness of the field, so serializations should ignore empty but initialized tap_trees.
see also https://github.com/rust-bitcoin/rust-bitcoin/pull/1194, where this caused downstream issues.