matematykaszkolna.pl
Konwersja drzewa poszukiwań binarnych do listy dwukierunkowej Mariusz: struct Node { int data; struct Node *prev; struct Node *next; }; struct List { struct Node *head; struct Node *tail; }; void BSTtoDLL(struct Node * root, struct List *L) { if(root != NULL) { BSTtoDLL(root−>next,L) ; root−>next = L−>head; if(L−>head != NULL) L−>head−>prev = root; L−>head = root; BSTtoDLL(root−>prev,L); } } 1. Jak zmodyfikować tę funkcję aby ustawiała także ogon listy ? 2. Jak napisać równoważną funkcję w sposób iteracyjny ? w czasie O(n) Tutaj myślałem nad tym aby ostatnie wywołanie rekurencyjne zastąpić pętlą a pierwsze stosem tylko jak to miałoby wyglądać
20 paź 21:37
Mariusz: Jeśli chodzi o ustawianie ogona listy to wystarczy dopisać else do if(L−>head != NULL) if(L−>head != NULL) L−>head−>prev = root; else L−>tail = root; Co z rekurencją ? Drugie wywołanie jest ogonowe i można zamienić je na iterację ale jaki macie pomysł na pierwsze wywołanie ? Najlepiej aby nie tworzyć nowych węzłów i aby funkcja działała w czasie O(n)
21 paź 23:59