Hi @vidyasethu, sorry for the late answer, but I had work with others homework and couldn’t engage in a discussion
So basically the Merkle tree is a tree like data structure consisting of hashes. Each leaf node in a tree represents the data (or txid) and all intermediary nodes are hashes of the of the neighbouring nodes. When you want to validate if the hash is part of a merkle tree root, you must know the intermediate nodes and the neighbour, which means you don’t need to recalculate the entire tree this is a method SPVs use to verify transactions without requiring the complete block. Not sure how exactly this is represented in math, but it basically looks like this:
So for example if you would want to verify hash Hc, you would only need to calculate Hcd - Hash(Hc + Hd) and the merkle root, which you get by hashing Habcd - Hash(Hab + Hcd), notice we didn’t require hashes Ha and Hb to verify that the transaction Hc is part of the Merkle Root.
The two characters are used to represent a byte in hexadecimal, which has the size of 8 bits, which corresponds to using two digits in a hexadecimal system (FF -> 1111 1111).
Well to be precise a hash is a buffer in memory which has a fixed size, which means it always uses the same amount of memory no matter the actual value the hash is. For example if somehow you would get a hash result 1, this would still be seen in the memory as 0000…248 MORE ZEROS…001. Sou it would have the same size, but the value would be 1