Drzewo bst, ile węzłów

0

Mam zadanie:
zadasd.jpg
Które rozwiązałem w następujący sposób :

Ile(T,x)
y<-0
if left[x]!=NIL i right[x]=NIL
  then y<-y+1;
  Ile(T,left[x])
if left[x]=NIL i right[x]!=NIL
  then y<-y+1
  Ile(T,right[x])
if left[x]!=NIL i right[x]!=NIL
  then Ile(T,right[x]) Ile(T,left[x])
return y

Czy jest to poprawnie napisany pseudokod do tego zadania? Niczego nie pominąłem?

2

Nie wyglada to prawidlowo: zawsze na poczatku zerujesz licznik, a nie wykorzystujesz nigdzie wartosci zwroconych z wywolan rekurencyjnych. Prawidlowo powinno wygladac to tak:

Count(root)
    y <- 0
    isOdd <- FALSE
    if (root.left != NIL)
        y <- y + Count(root.left)
        isOdd <- !isOdd
    if (root.right != NIL)
        y <- y + Count(root.right)
        isOdd <- !isOdd
    if (isOdd)
        y <- y+1
    return y
0
liczbaJedynakow(root)
    if (root.left != Nil)
        if (root.right != Nil)
             return liczbaJedynakow(root.left)+liczbaJedynakow(root.right);
        return liczbaJedynakow(root.left)+1;
    if (root.right != Nil)
        return liczbaJedynakow(root.right) + 1;
    return 0

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