I'm not sure how Merkle tree and Merkle proof are different. I thought Merkle proof is the same as the Merkle root in each block. However, it seems like Merkle proof contains all Merkle roots of all blocks. Could anyone explain about Merkle proof visually?
Merkle proofs are not for blocks nor is there a singular "the merkle proof." Merkle proofs are for transactions. They prove that a particular transaction is contained within a particular block.
A merkle proof begins with the transaction that is being proved. Then each branch in the merkle tree that cannot be derived from the transaction is provided, all the way up to the root. The result is a path from the merkle root to the transaction. A verifier can then use this path to compute the merkle root and check that it matches the one in the block header.