MerkleTree(HashLinkedList<T> hashlist) → $\Theta(n+n-1)=\Theta(2n)=\Theta(n)$
$(n)$ per la creazione dei nodi foglia, $(n-1)$ per la creazione dei nodi intermedi e il root
getHeight() → $\Theta(1)$
getIndexOfData(MerkleNode branch, T data) → $O(2^{h+1}-1)$ $h:$ altezza del sotto albero
getIndexOfData(T data) → $O(2^{h+1}-1)$ $h:$ altezza albero
validateData(T data) → $O(n)$ $n:$ dimensione lista nodi foglia
validateBranch(MerkleNode branch) → $O(2^{h+1}-1)$ $h:$ altezza dell’albero
validateTree(MerkleTree<T> otherTree) → $\Theta(1)$
findInvalidDataIndices(MerkleTree<T> otherTree) → $O(2^{h+1}-1)$ $h:$ altezza albero
getMerkleProof(T data) → $O(2^{h+1}-1+h+n)$ $h:$ altezza albero
getMerkleProof(MerkleNode branch) → $O(2^{h+2}-2+h)$ $h:$ altezza albero
getIndex(MerkleNode node, String dataHash, int nodesOnLeft) → $O(2^{h+1}-1)$ $h:$ altezza del sottoalbero con radice node
findInvalidDataIndicesRecursive(MerkleNode node, MerkleNode otherNode, int nodesOnLeft, Set<Integer> invalidIndices) → $O(2^{h+1}-1)$ $h:$ altezza albero
getPathToRoot(MerkleNode currentNode, String dataHash, List<MerkleNode> path) → $\Theta(2^{h+1}-1)$ $h:$ altezza albero