I'd like to check if my understanding is correct. This is regarding the purpose of having the Merkle tree structure for all transactions inside a block. Is the only reason it exists so that thin clients can verify that a transaction exists in a block without being told about all the other transactions of that block?
Seems quite complicated to implement that (instead of just concatenation of transactions) for a rather special case. Particularly since the maximum size of a block is not very large - so there isn't really a problem with verifying all the transactions and ensuring that the hash of the block matches up to those.