Ternärer Baum als Pseudocode?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Einfacher Pseudocode für rekursive Variante:

int count(v0):
   if (v0)=NULL:
      return 0 #Abbruchbedingung
   return 1+count(v0.l)+count(v0.m)+count(v0.r)

Das wars schon, kurz und schmerzlos.

Es geht um Pseudo-Code (...)

Für deine einzelnen Schleifen solltest du dennoch eine Laufzeitbedingung angeben, so wie du es bei der obersten Schleife auch getan hast. Auch die öffnende Klammer vor dem b fehlt. 😀

Insgesamt ist dein Pseudocode wohl kaum funktionstüchtig. Im Vorfeld wäre es notwendig, n zu kennen - also die Anzahl an Ebenen. Wozu die inneren Schleifen dienen, verstehe ich nicht. Die rekursive Formulierung ist hier viel einfacher.

Zudem muss das Ganze ja noch als rekursive Funktion geschrieben werden (...)

Je Schritt läufst du über alle Kindknoten des aktuellen Knotens und rufst zu diesen jeweils wieder den nächsten Schritt auf.

traverse(root):
  iterate over root.children:
    traverse(child)

Dazu muss noch die Zählung ergänzt werden. Du hast hierfür verschiedene Optionen, bspw. eine globale Variable oder besser, wenn du die Anzahl an Kindknoten in jedem Schritt zurückgibst, wobei natürlich die Kindknoten der folgenden rekursiven Aufrufe mit dazu addiert werden müssen:

traverse(root):
  sum = count(root.children)

  iterate over root.children:
    sum += traverse(child)

  return sum
Man könnte ja theoretisch unendlich viele Kinderknoten haben? Oder versteh ich da was falsch?

Der Baum kann eine Tiefe von n haben, wobei jeder Knoten maximal drei Kindknoten besitzt.

regex9  10.05.2019, 00:14

Nachtrag zu obigem Algorithmus: Die Wurzel sollte man noch mitrechnen, sofern es um die Anzahl aller Knoten im Baum geht.

1