From what I have read, suppose B sends 1 bitcoin to C. C wishes to verify B's payment and asks C for the block number (location) that input transaction is located at. (Is this correct understanding/procedure?) Then C checks whether transaction is actually in the block mentioned using Merkle tree.
And this is where my understanding stops. I know that Merkle tree has nice property such that if one has transaction itself and some trde hashes, you do not have to check all subtree hashes to check validity of transaction in the block. But this still requires receiving hashes from full node that knows what transactions are in the block. If all C knows is the block number plus transaction, then how is this different from just receiving the answer yes from the full node? The full node would still have to search where the transaction is located at the merkle tree in order to send subtree hashes. I just do not see how merkle tree helps to verify efficiently.
But given the level of my confusion, I do think that it may be better to answer by giving detailed procedures on what happens when B sends bitcoin to C.