Teil 7: Bäume Beispiele (1)
Teil 7: Bäume Beispiele (1)
Teil 7: Bäume Beispiele (1)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Implementierung von beliebigen <strong>Bäume</strong>n<br />
Implementierung mit verketteten Knoten<br />
Jeder Knoten enthält 2 Zeiger:<br />
•! Ein Zeiger auf das erste Kind<br />
•! Ein Zeiger für den rechts liegenden<br />
Geschwisterknoten (engl. sibling)<br />
root<br />
A<br />
A<br />
B<br />
C<br />
D<br />
E<br />
F<br />
G<br />
B<br />
C<br />
D E F G<br />
H I J K<br />
H<br />
I<br />
J<br />
K<br />
L<br />
M<br />
L<br />
M<br />
struct Node<br />
{<br />
int data;<br />
Node* firstChild;<br />
Node* nextSibling;<br />
};<br />
O. Bittel; Sept. 2008 Programmiertechnik 2 - <strong>Bäume</strong> 7-11<br />
Implementierung von vollständigen Binärbäumen<br />
Implementierung mit einem Feld<br />
Die Knoten werden ebenenweise in einem Feld abgespeichert.<br />
Ebene 0<br />
Ebene 1<br />
5<br />
8 7<br />
a [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]<br />
5 8 7 1 3 9 2 12 10 6<br />
Ebene 2<br />
1 3 9 2<br />
Ebene 3<br />
12 10 6<br />
Effizienter Zugriff auf Eltern und Kinder:<br />
•! Kinder von a[i]: a[2*i+1] und a[2*i+2] für i " 0<br />
•! Elternknoten von a[i]: a[(i-1)/2] für i " 1 und mit ganzzahliger Division<br />
Beispiel:<br />
•! Kinder von a[3] = 1: a[7] = 12 und a[8] = 10<br />
•! Elternknoten von a[6] = 2: a[(6-1)/2] = a[2] = 7<br />
O. Bittel; Sept. 2008 Programmiertechnik 2 - <strong>Bäume</strong> 7-12