Vorbereitung struct knoten b Zeiger auf Wurzel int
Vorbereitung: struct knoten { b: Zeiger auf Wurzel int x; struct knoten *l, *r; bh: Hilfszeiger } *b, *bh, **bp; bp: Zeiger auf knoten bp b 5 l 2 l r r 8 l r
int einf(struct knoten *b, struct knoten *bh, int y) { struct knoten *bvor; int k; while(b) { if (b x == y) return 1; bvor = b; if (b x > y) { k = -1; b = b l; } else { k = 1; b = b r; } } if (k == -1) bvor l = bh; else bvor r = bh; bh x = y; bh l=0; bh r=0; return 0; }
Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r bvor 2 l bh r 8 l ? ? ? r 5 > 3, daher k=-1, b umgelegt auf 2
Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r bvor 2 l r 8 l r 5 > 3, daher k=-1, b umgelegt auf 2 bvor = b; bh ? ? ?
Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r bvor 2 l r 8 l r 5 > 3, daher k=-1, b umgelegt auf 2 bvor = b; bh ? ? ? 2 < 3, daher k=1, b umgelegt auf NULL
Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r bvor 2 l r 8 l r 5 > 3, daher k=-1, b umgelegt auf 2 bvor = b; bh ? ? ? 2 < 3, daher k=1, b umgelegt auf NULL While zu Ende
Einfügen von 3: einf(b, bh, 3); b 5 l While zu Ende, k=1 r bvor 2 l bh r 8 l ? ? ? r bvor r = bh
Einfügen von 3: einf(b, bh, 3); b 5 l While zu Ende, k=1 r bvor 2 l r 8 l r bvor r = bh Daten setzen in bh: bh ? ? ?
Einfügen von 3: einf(b, bh, 3); b 5 l While zu Ende, k=1 r bvor 2 l r 8 l r bvor r = bh Daten setzen in bh: bh 3 l r
int insert(struct knoten **bp, int y) { while(*bp) { if ((*bp) x == y) return 1; if ((*bp) x > y) bp = &( ( *bp ) l ); else bp = &( ( *bp) r ); } *bp = (struct knoten *)malloc(sizeof(struct knoten)); if (*bp == 0) return 2; (*bp) x = y; (*bp) l = 0; (*bp) r = 0; return 0; }
Einfügen von 3: insert(bp, 3); bp b 5 l 2 l r r 8 l r 5 > 3, *bp umgelegt auf linken Zeiger bei 5
Einfügen von 3: insert(bp, 3); bp b 5 l 2 l r r 8 l r 5 > 3, *bp umgelegt auf linken Zeiger bei 5 2 < 3, *bp umgelegt auf rechten Zeiger bei 2
Einfügen von 3: insert(bp, 3); bp b 5 l 2 l r r 8 l ? ? ? r 5 > 3, *bp umgelegt auf linken Zeiger bei 5 2 < 3, *bp umgelegt auf rechten Zeiger bei 2 *bp ist NULL, Daher wird nun eingefügt. Schaffe neuen Knoten und lege *bp auf diesen
Einfügen von 3: insert(bp, 3); bp b 5 l 2 l r r 8 l 3 l r r 5 > 3, *bp umgelegt auf linken Zeiger bei 5 2 < 3, *bp umgelegt auf rechten Zeiger bei 2 *bp ist NULL, Daher wird nun eingefügt. Schaffe neuen Knoten bh und lege *bp auf bh
Einfügen von 3: insert(bp, 3); b 5 l 2 l r 3 l Ergebnisbaum r 8 l r r
- Slides: 15