public List<Pair<C,C>> getPath(C leaf) {
		MerkleTree.Node curNode = leafToNode.get(leaf);
		if (curNode == null)
			return null;
		
		List<Pair<C,C>> path = new ArrayList<Pair<C,C>>(depth);
		for (curNode = curNode.parent; curNode != null; curNode = curNode.parent) {
			// The tree is left-leaning -- since there exists at least one node, 
			// the left child of every non-leaf node must exist.
			assert curNode.left != null;
			path.add(new Pair<C, C>((C)curNode.left.hash, curNode.right != null ? (C)curNode.right.hash : null));
		}
		
		return path;
	}