abstract
| - is weder schön nu sonst irgendwos, hab nur des reinkopiert was i irgendwann mal gschrieben hab. falls wer was schöneres hat, bitte ändern...--hechi #include #include #include #include struct NODE { //char name[31]; int key; NODE* pLeft; NODE* pRight; }; //WB Ops: NODE* TreeSearch(int key,int mode); void TreeInsert(NODE* node); int TreeDelete(int key); //ausgaben: void TreeHR(NODE* pNode); void TreeNR(NODE* pNode); void TreeSR(NODE* pNode); NODE* pRoot; void main() { pRoot=NULL; NODE* pWork; int menu=0; int key=0; int x=1; while(x) { clrscr(); printf("1...neue
"); printf("2...suchen
"); printf("3...löschen
"); printf("4...NR Ausgeben
"); printf("5...HR Ausgeben
"); printf("6...SR Ausgeben
"); printf("0...beenden
"); scanf("%d",&menu); switch(menu) { case 1: pWork=new NODE(); printf("Key eingeben: "); scanf("%d",&pWork->key); TreeInsert(pWork); break; case 2: pWork=new NODE(); printf("Suchkey eingeben: "); scanf("%d",&key); pWork=TreeSearch(key,0); if(pWork==NULL) { printf("Nicht Vorhanden
"); getch(); } else { printf("%d",pWork->key); getch(); } break; case 3: printf("key eingeben: "); scanf("%d",&key); if(TreeDelete(key)==0) { printf("Nicht vorhanden!
"); getch(); } else { printf("gelöscht!
"); getch(); } break; case 4: TreeNR(pRoot); getch(); break; case 5: TreeHR(pRoot); getch(); break; case 6: TreeSR(pRoot); getch(); break; case 0: x=0; break; } } } //WB Ops: NODE* TreeSearch(int key,int mode) { NODE* pWork=pRoot; NODE* pPrev=pWork; while(pWork!=NULL)//Falls nicht auffindbar { if((pWork->key)==key) { if(mode) { return pPrev;//gefunden } return pWork; } if((pWork->key)pRight; } else { pPrev=pWork; pWork=pWork->pLeft; } } if(mode) { return pPrev; } return pWork; } void TreeInsert(NODE* node) { NODE* pWork=pRoot; node->pLeft=NULL; node->pRight=NULL; if(pRoot==NULL) { pRoot=node; return; } while(1) { if((node->key)<(pWork->key)) { if((pWork->pLeft)!=NULL) { pWork=pWork->pLeft; } else { pWork->pLeft=node; return; } } else { if((pWork->pRight)!=NULL) { pWork=pWork->pRight; } else { pWork->pRight=node; return; } } } } int TreeDelete(int key) { NODE* pDel=NULL; NODE* p2Bl; NODE* pPrev; pDel=TreeSearch(key,0); pPrev=TreeSearch(key,1); printf("%d", pDel->key); getch(); if(pDel==NULL) { return 0; } else { if((pDel->pLeft==NULL)&&(pDel->pRight!=NULL)) { if((pPrev->key)>(pDel->key)) { pPrev->pLeft=pDel->pRight; } else { pPrev->pRight=pDel->pRight; } free(pDel); return 1; } if((pDel->pLeft!=NULL)&&(pDel->pRight==NULL)) { if((pPrev->key)>(pDel->key)) { pPrev->pLeft=pDel->pLeft; } else { pPrev->pRight=pDel->pLeft; } free(pDel); return 1; } if((pDel->pLeft==NULL)&&(pDel->pRight==NULL)) { if((pPrev->key)>(pDel->key)) { pPrev->pLeft=NULL; } else { pPrev->pRight=NULL; } free(pDel); return 1; } if((pDel->pLeft!=NULL)&&(pDel->pRight!=NULL)) { while(1) { key--; p2Bl=TreeSearch(key,0); if(p2Bl!=NULL) { break; } } TreeDelete(key); pDel->key=key; return 1; } } } //Ausgaben: void TreeSR(NODE* pNode) { if(pNode!=NULL) { TreeSR(pNode->pLeft);//Ersten Teilbaum in SR ausgeben printf("%d
",pNode->key);//Wurzel ausgeben TreeSR(pNode->pRight);//Zweiten Teilbaum in SR ausgeben } } void TreeHR(NODE* pNode) { if(pNode!=NULL) { printf("%d
",pNode->key);//Wurzel ausgeben TreeHR(pNode->pLeft);//Ersten Teilbaum in HR ausgeben TreeHR(pNode->pRight);//Zweiten Teilbaum in HR ausgeben } } void TreeNR(NODE* pNode) { if(pNode!=NULL) { TreeNR(pNode->pLeft);//Ersten Teilbaum in NR ausgeben TreeNR(pNode->pRight);//Zweiten Teilbaum in NR ausgeben printf("%d
",pNode->key);//wurzel ausgeben } }
|