...Typisch. XD Ik zeg zo dat het gelukt is, komt de docent met de mededeling dat de boom, vanwege de moeilijkheid, niet iterabel hoeft te zijn. Nouja, pluspunten voor mij omdat het mij wel gelukt is, nu.
Anyway, die SearchTree moet nu een weight balanced search tree worden. Die WBSTree moet erven van de SearchTree (dmv extends). Nu had ik twee vraagjes:
Gegeven de volgende (ongebalanceerde) boom:
Om deze gebalanceerd te maken doe je een single left rotation. Volgens het algoritme doe ik dan dit:
- Verwissel b en a
- Geef a b's linkerkind als rechterkind (Overschrijf je c dan niet als b WEL een linkerkind heeft?)
- b neemt a (plus zijn subboom) als zijn linkerkind
Mijn vraag ging dus als eerste over dat tweede punt (bijvoorbeeld bij de boom:
Waarbij -a kleiner is dan a. Ik dat geval krijgt a dus -a als rechterkind, maar wat gebeurt er met c? Schuift die als het ware 1 niveau naar beneden, of gebeurt er iets anders?
De tweede vraag: Ik moet dus een methode hebben om de grootste en de kleinste boom te pakken te krijgen. De SearchTree bevat left en right (van het type SearchTree<K,V>) en deze zijn protected. Mijn WBSTree kan er gewoon bij.
Maar nu zit ik eigenlijk met het probleem dat ik een SearchTree niet zomaar naar een WBSTree kan casten (ik krijg een ClassCastException).
En ik moet de grootste en kleinste subboom te pakken krijgen. Ik moet dus een methode largest en smallest hebben.
Alleen: als ik 'm in WBSTree definieer en recursief gebruik, zit ik dus met left en right die SearchTrees zijn en de methode niet kennen.
Als ik in SearchTree de methode uitwerk, kan ik het resultaat niet casten naar een WBSTree vanwege die Exception.
Hoe los ik dat op? =s