200 likes | 435 Views
Bomen. Toepassingen Terminologie Eigenschappen Stellingen Implementatie Doorlopen van bomen Expressie bomen. Toepassingen. Zoekproblemen Bijv. puzzels en spellen Opslag van expressies Rekenkundige expressies Ontleden van syntactische structuren Bijv. XML-document. Terminologie.
E N D
Bomen • Toepassingen • Terminologie • Eigenschappen • Stellingen • Implementatie • Doorlopen van bomen • Expressie bomen
Toepassingen • ZoekproblemenBijv. puzzels en spellen • Opslag van expressies • Rekenkundige expressies • Ontleden van syntactische structurenBijv. XML-document
Terminologie • boom / tree • wortel / root • knoop / node • boog / kant / arc • blad / leave • volledige boom / fully tree
Terminologie • inwendige knoop / interior node • ouder /parent • kind /child / descendant • hoogte / height • subboom / subtree • pad / path
Terminologie Hoogte van een boom is het grootste aantal bogen dat een pad van de wortel naar een blad bevat. In het voorbeeld is de hoogte dus 3. Binaire boom: elke knoop heeft ten hoogste twee kinderen.
Eigenschappen • Er is slechts één pad van de wortel naareen willekeurige knoop. • Er is slechts één knoop die geen ouderheeft.
Stellingen • Een volledige boom met hoogte n heeft 2nbladeren. • Een volledige boom met hoogte n heeft2n+1 -1 knopen.
Implementatie class Node { private Node left, right; // recursieve structuur private int number; Node(int getal) // creatie van een blad { number = getal; left = right = null; } }
Toevoegen Een nieuwe knoop wordt als blad toegevoegd. Voorbeeld voeg 7 toe.
Toevoegen 7 toevoegen aan onderstaande boom gebeurt recursief.
Toevoegen void add(int getal) { if (getal < number) if (left == null) left = new Node(getal); else left.add(getal); else // analoog: plaats getal in rechtersubboom }
Doorlopen • Pre-order10 8 5 9 14 12 • In-order5 8 9 10 12 14 • Postorder 5 9 8 12 14 10
Doorlopen void preOrder() { System.out.print(number +’’ ”); if (links != null) links.preOrder(); if (rechts != null) rechts.preOrder(); }
Doorlopen void inOrder() { if (links != null) links.inOrder(); System.out.print(number +’’ ”); if (rechts != null) rechts.inOrder(); }
Expressie bomen 3 + 5 (3 + 5) * 7 pre-order: * + 3 5 7 in-order: 3 + 5 * 7 post-order: 3 5 + 7 *
Expressie bomen 3 + (5 * 7) class Expr { private Expr left, right; private char operator; private int value; }
Expressie bomen Evaluatie van de expressie gebeurt recursief. De creatie van de boom gebeurt m.b.v. de tools JLex en Byacc.