9. Adatszerkezetek és adattípusok Bináris keresőfa. Fák
Fontos tudnivalók Második projekt témája: bináris kereső fák (leszállópálya feladat modelljére) Második projekt leadási határideje: április 29.-május 2.
01 02 03 Algoritmusok és adatszerkezetek Algoritmusok elemzése Adatszerkezetek és adattípusok 04 05 06 Statikus adatszerkezetek: Tétel (rekord), tömb Félstatikus adatszerkezetek: Vermek, sorok Dinamikus adatszerkezetek: Listák
07 08 09 Dinamikus adatszerkezetek: Listák Ismétlés, összefoglaló Dinamikus adatszerkezetek: Fák, Bináris keresőfák Fák Kupacok 10 11 12 Hasítótáblák Rendezési algoritmusok Keresési algoritmusok
13 14 Adattömörítés Összefoglaló és ismétlés
Bináris keresőfa function.h typedef struct root int adat; struct root *bal; struct root *jobb; root; root *create(int); void destroy(root **); void insert(root **, int); void inorder(root *); void preorder(root *); void postorder(root *); root *Delete(root **, int); root *Find(root *, int); #endif // FUNCTIONS_H_INCLUDED
Bináris keresőfa (fácska) main.c int main() root *tree; tree = create(); tree = NULL; FILE *f; //állománykezelés int x; while(scanf("%d", &x)!=eof) insert(&tree, x); printf("inorder: "); inorder(tree); printf("\npreorder: "); preorder(tree); printf("\npostorder: "); postorder(tree); int y = 3; root *facska; facska = (root *)malloc(sizeof(root)); if(!facska) printf("sikertelen lefoglalas"); return 0; facska = Find(tree, y); printf("\nadott ertektol kezdodo fa: "); preorder(facska); destroy(&tree);
Bináris keresőfa function.c void insert(root **fa, int a) if((*fa) == NULL) (*fa) = create(a); else if((*fa)->adat > a) insert(&((*fa)->bal),a); else insert(&((*fa)->jobb),a); root *create(int a) root *ag; ag = (root *)(malloc(sizeof(root))); if(!ag) printf("sikertelen lefoglalas"); return 0; ag->adat = a; ag->jobb = NULL; ag->bal = NULL; return ag;
Bináris keresőfa function.c void inorder(root *fa) if(fa->bal) inorder(fa->bal); printf("%3d ", fa->adat); if(fa->jobb) inorder(fa->jobb); void preorder(root *fa) printf("%3d ", fa->adat); if(fa->bal) preorder(fa->bal); if(fa->jobb) preorder(fa->jobb); void postorder(root *fa) if(fa->bal) postorder(fa->bal); if(fa->jobb) postorder(fa- >jobb); printf("%3d ", fa- >adat);
Fák bináris fák - ábrázolásai
Fák bináris fák kimeneti ábrázolásmódok
Fák bináris fák kimeneti ábrázolásmódok
Fák bináris fák bemeneti ábrázolásmódok
Gyakorlatok http://btv.melezinek.cz/binary-heap.html
Bináris fa function.h typedef struct root int adat; struct root *bal; struct root *jobb; root; root *create(int); void destroy(root **); root * insert(); void inorder(root *); void preorder(root *); void postorder(root *); root *Delete(root **, int); bool find(root *, int); #endif // FUNCTIONS_H_INCLUDED
Bináris fa function.c void destroy(root **fa) if((*fa)!= NULL) destroy(&((*fa)->bal)); destroy(&((*fa)->jobb)); free((*fa)); (*fa) = NULL; root *Find(root *fa, int a) if(fa == NULL) return 0; if(a == fa->adat) return fa; else if(a < fa->adat) Find(fa->bal, a); else Find(fa->jobb, a);
Bináris fa function.c root *insert() root *newnode; int x; printf("enter data(-1 for no data):"); scanf("%d",&x); if(x==-1) return NULL; newnode=create(); newnode->data=x; printf("enter left child of %d:\n",x); newnode->left=insert(); printf("enter right child of %d:\n",x); newnode->right=insert(); bool find(struct root* node, int key) if (node == NULL) return false; if (node->data == key) return true; bool res1 = find(node->left, key); if(res1) return true; bool res2 = find(node->right, key); return res2; return newnode;
Dokumentáció https://moodle.ms.sapientia.ro/course/view.php?id=32 Cormen-Lieserson-Rivest-Stein.-.Uj.algoritmusok.pdf https://www.geeksforgeeks.org/binary-search-tree-set-2-delete/ http://btv.melezinek.cz/binary-heap.html