Drzewo binarne
W drzewie binarnym każdy węzeł ma co najwyżej 2 synów: lewego i prawego.
Wyróżniony węzeł nazywa się korzeniem, a węzły które nie mają synów – liśćmi.
Wysokość (głębokość) drzewa – to jest największa odległość od korzenia do liścia.
W pełnym drzewie binarnym wszystkie liście są jednakowo odległe od korzenia.
Pełne drzewo o głębokości G ma 2G-1 węzłów.
Węzły numeruje się kolejno, przechodząc poziomy drzewa, począwszy od korzenia, który ma numer 1.
Liczba węzłów na każdym poziomie jest potęgą dwójki.
Każdy następny poziom ma 2 razy więcej węzłów.
Węzły na poziomie i mają kolejne numery od 2i-1 do 2i-1.
Dla węzła o numerze i:
2*i jest numerem jego lewego syna
2*i+1 jest numerem jego prawego syna
i/2 jest numerem jego ojca
Wszyscy lewi synowie mają więc numery parzyste, a prawi synowie – numery nieparzyste.
W węzłach można przechowywać dane (każdy węzeł ma ten sam typ danych): liczby, znaki, stringi, obiekty.
Najprostszą strukturą danych do przechowywania drzewa jest tablica (każdy element tablicy jest jednym węzłem drzewa).
Napisz program, który:
dla danej wysokości drzewa zwraca liczbę jego węzłów, a następnie:
dla danego numeru węzła w tym drzewie zwraca:
numery węzłów położonych na ścieżce od tego węzła do korzenia (i zliczy ile tych węzłów jest)
rozmiar poddrzewa tego węzła (czyli liczba węzłów: on plus wszyscy jego potomkowie)
Przykład: