Ethereum is a blockchain, so it contains transactions packed into blocks. Once executed, transactions may modify account states. There are two kinds of accounts: simple, usually backed by private keys, and contracts.
State of simple account is basically ether balance and nonce, where nonce is a number incremented every time transaction originating from this account is executed. State of contract account is ether balance, nonce, contract's byte code, and hash of content of smart contract's storage. As long as smart contracts cannot initiate transactions, nonce for smart contract has different meaning and is incremented every time this smart contract deploys another smart contract.
Storage of each smart contract is organized as a separate Merkle-Patricia tree: a variation of Merkle tree that is able to efficiently store key=>value mapping with short keys. In this case keys are 256-bit storage addresses. States of all accounts are also organized as Merkle-Patricia tree, but this time keys are 160-bit account addresses.
Each block contains hash of accounts state as it was after executing all the transactions included into the block, so every node may easily verify that it executed transactions correctly.