150 likes | 300 Views
bp. b. 5 l r. 2 l r. 8 l r. Vorbereitung:. struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp;. b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten.
E N D
bp b 5 l r 2 l r 8 l r Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten
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; }
bvor b 5 l r 2 l r 8 l r bh ? ? ? Einfügen von 3: einf(b, bh, 3); bvor = b; 5 > 3, daher k=-1, b umgelegt auf 2
bh ? ? ? Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r 5 > 3, daher k=-1, b umgelegt auf 2 bvor 2 l r 8 l r bvor = b;
bh ? ? ? Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r 5 > 3, daher k=-1, b umgelegt auf 2 bvor 2 l r 8 l r bvor = b; 2 < 3, daher k=1, b umgelegt auf NULL
bh ? ? ? Einfügen von 3: einf(b, bh, 3); bvor = b; b 5 l r 5 > 3, daher k=-1, b umgelegt auf 2 bvor 2 l r 8 l r bvor = b; 2 < 3, daher k=1, b umgelegt auf NULL While zu Ende
bh ? ? ? Einfügen von 3: einf(b, bh, 3); While zu Ende, k=1 b 5 l r bvor bvor r = bh 2 l r 8 l r
bh ? ? ? Einfügen von 3: einf(b, bh, 3); While zu Ende, k=1 b 5 l r bvor bvor r = bh 2 l r 8 l r Daten setzen in bh:
bh 3 l r Einfügen von 3: einf(b, bh, 3); While zu Ende, k=1 b 5 l r bvor bvor r = bh 2 l r 8 l r Daten setzen in bh:
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; }
bp b 5 l r 2 l r 8 l r Einfügen von 3: insert(bp, 3); 5 > 3, *bp umgelegt auf linken Zeiger bei 5
Einfügen von 3: insert(bp, 3); bp b 5 l r 5 > 3, *bp umgelegt auf linken Zeiger bei 5 2 l r 8 l r 2 < 3, *bp umgelegt auf rechten Zeiger bei 2
Einfügen von 3: insert(bp, 3); bp b 5 l r 5 > 3, *bp umgelegt auf linken Zeiger bei 5 2 l r 8 l r 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 r 5 > 3, *bp umgelegt auf linken Zeiger bei 5 2 l r 8 l r 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 3 l r
3 l r Einfügen von 3: insert(bp, 3); Ergebnisbaum b 5 l r 2 l r 8 l r