Witam, mam problem ze zrozumieniem rekurencyjnych algorytmów wypisania elementów drzewa w porządkach inorder, postorder, preorder.
Przyjmijmy że mamy jakieś drzewo BST o danej strukturze:
struct element
{
int k;
struct element *p;
struct element *right;
struct element *left;
};
Przykładowo:
8
3____________10
1 6___________14
4 7_______13
i mamy do niego funkcje wypisującą drzewo w porządku np. inorder:
void wypisz_inorder(struct element *root)
{
if (root!=NULL)
{
wypisz_inorder(root->left);
printf("%d ", root->k);
wypisz_inorder(root->right);
}
}
Więc przechodząc po kolei mamy: wypisz_inorder(8), wypisz_inorder(3), wypisz_inorder(1),
wypisz_inorder(null) więc mamy naszego printa wypisującego 1,
poźniej wypisz_inorder(null) ponieważ "1" nie ma już synów i zakończenie funkcji.
I tutaj moje pytanie: Jak później ta funkcja wypisuje kolejne wartości, na jakiej zasadzie ona wraca do 3 wypisuje 3, 4, 6, 7, poźniej znowu wraca do 8, wypisuje 8 i leci dalej po prawym podrzewie. Nie widze w tej funkcji tego "powrotu" wyżej, imo ona się zatrzymuje na 1 i kończy działanie a jednak tak nie jest.
Proszę o wytłumaczenie, będę bardzo wdzięczny :)