Internal Structure of Indexes:
Oracle uses B*-tree indexes which are balanced to equalize access times to any row. The subsequent figure described this:
The upper blocks (branch blocks) of a B*-tree index holds index data which points to lower level index blocks and the lowest level index blocks (leaf blocks) holds every indexed data value and a corresponding ROWID used to locate the real row; the leaf blocks are doubly connected. An Index in columns containing character data are based on the binary values of the characters in the database character set.
For a non-unique index, the ROWID is involved in the key in sorted order and the index key, ROWID sort so non-unique indexes. For a unique index, there is one ROWID per data value. Key values holding all nulls are not indexed and except for the cluster indexes. Two rows can both holds all nulls and not violate a unique index.