1 Przeglądanie inOrder function BSTinorder(BSTNode root) if root NOT NULL BSTinorder(root.left) Print(root) BSTinorder(root.right) 2, 4, 6, 8, 9, 10, 12, 15
2 Przeglądanie preOrder function BSTpreorder(BSTNode root) if root NOT NULL Print(root) BSTpreorder(root.left) BSTpreorder(root.right) 8, 4, 2, 6, 10, 9, 12, 15
3 Przeglądanie postOrder function BSTpostorder(BSTNode root) if root NOT NULL BSTpostorder(root.left) BSTpostorder(root.right) Print(root) 2, 6, 4, 9, 15, 12, 10, 8
4 Poprzednik Poprzednikiem węzła x na drzewie BST będziemy nazywali węzeł, którego wartość jest bezpośrednio mniejsza od wartości węzła x. To znaczy, że w drzewie nie występują węzły o wartościach z przedziału a) x 1 posiada lewego potomka, to poprzednikiem będzie węzeł o największym kluczu w lewym poddrzewie x 1 x1x1 predecessor(x 1 ) b) x 2 nie posiada lewego potomka, to poprzednikiem będzie pierwszy rodzic dla którego x 2 leży w prawym poddrzewie x2x2 predecessor(x 2 ) c) Dla węzła x 3 przypadki a i b nie są spełnione. Węzeł nie ma poprzednika. Dlaczego? x3x3
5 Następnik Następnikiem węzła x w drzewie BST będziemy nazywali węzeł, którego wartość jest bezpośrednio większa od wartości węzła x. To znaczy, że w drzewie nie występują węzły o wartościach z przedziału a) x 1 posiada prawego potomka, to poprzednikiem będzie węzeł o najmniejszym kluczu w prawym poddrzewie x 1 x1x1 successor(x 1 ) b) x 2 nie posiada prawego potomka, to poprzednikiem będzie pierwszy rodzic dla którego x 2 leży w lewym poddrzewie c) Dla węzła x 3 przypadki a i b nie są spełnione. Węzeł nie ma następnika. Dlaczego? x2x2 successor(x 2 ) x3x3
6 Usuwanie węzłów A) Węzeł nie posiada dzieci – po prostu usuwamy węzeł
7 Usuwanie węzłów B) Węzeł posiada tylko lewego lub tylko prawego potomka - usuwany węzeł zastępujemy potomkiem
8 Usuwanie węzłów C) Węzeł ma obu potomków - zastępujemy losowo raz przez jego poprzednikiem, a raz przez jego następnikiem Zamiana z poprzednikiem Zamiana z następnikiem
9 Usuwanie węzłów Jak usunąć całe drzewo?