class MerkleTree {

    public void appendLeaf(Node node) {
        int size = nodes.size();
        if (size <= 2) {
            nodes.add(node);
            if (size == 0) {
                nodes.add(new Node(node.getValue()));
            } else {
                updateHash(0);
            }
        } else {
            int parentIndex = getParentIndex(size);
            Node nodeToReplace = nodes.get(parentIndex);
            Node emptyNode = new Node(null);
            nodes.set(parentIndex, emptyNode);
            nodes.add(nodeToReplace);
            nodes.add(node);
            updateHash(parentIndex);
        }
    }

    public  MerkleTree(MessageDigest digest);
    public  MerkleTree(MessageDigest digest, List<byte[]> dataList);

}