Drzewa BST - inorder, postorder, preorder

0

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 :)

1

masz funkcje int a() { return 2; } oraz funkcje int b() { int tmp; tmp = a(); return tmp; }, wiec jadac po kolei:
utworzenie zmiennej
int tmp

wywolanie funkcji a() oraz przypisanie do zmiennej tmp
tmp = a() -> funkcja ta natychmiast powraca, to samo sie dzieje w Twoim przykladzie jesli przekazany zostanie NULL.

sterowanie wrocilo do funkcji b() i wywolywany jest return
return tmp

1 użytkowników online, w tym zalogowanych: 0, gości: 1