Mě třeba příjde, že nevím, kde bych použil strom. V podstatě HashSet má stejnou časovou složitost pro vyhledávání jako vyvážený binární strom. Je to logické, pohybování se v setřízeném hashi metodou rozděl a panuj je v principu úplně stejné, jako ve vyváženém binárním stromu.
Ze stromů mi stačí znát binární strom a vyvážený binární strom a to jen tak, ab se neřeklo - stejně to používat nebudeš. Podstatně důležitější je dobrá znalost HashSet a HashMap, tzn. vědět, jak dělat vlastní hashe, proč je nepotřebuješ dělat, proč je nutné overridnout equals, když overridneš hashCode.
Já třeba do této chvíle nevím, proč mi HashMap nedokáže vrátit více než 1 prvek k danému hashi. Pořeboval jsem to a musel jsem zbytečně dělat svou vlastní třídu, kerá závislost 1:N v HashMap implementovala. (už se na mě chystá Jirsák)