Do full nodes store the complete merkle tree or do they regenerate it when creating a merkle proof? I understand what the merkle root is for. And I understand that blocks don't store the merkle tree.
Question 1) Is there any place that the complete merkle trees get stored? I don't mean the merkle root hashes since I know they are in the block headers.
Question 2) Let's say a full node starts proving to a light node that a specific transaction is in Block J. How does the full node send the merkle branch to the light node? Does it loop through the transactions again to get the hashes and then sends the interior node hashes of transactions, or do full nodes already have the complete merkle tree (whole tree and each internal hash) stored somewhere?
Bitcoin Core, in its BIP37 implementation, will compute the Merkle proofs on the fly. It does not store the blocks' Merkle trees anywhere (only its root is stored).