In een tekstbestand wordt een boom met 1 wortel opgeslagen. De knopen van de boom worden via een uniek etiket gekenmerkt van het type string. Per regel in het tekstbestand wordt een relatie tussen een ouderknoop en kindknopen weergegeven, in volgend formaat:
ouder -> kind0,kind1,kind2,...
de kinderen worden dus gescheiden door komma's, en de ouder wordt van de kinderen gescheiden door de sequentie ` -> ` (dus beginnend en eindigend met een spatie).
Schrijf volgende functies:
lees_boom()
: deze methode heeft als enig argument de bestandsnaam waar de informatie over de in te lezen boom te vinden is (dit argument is dus van het type str
). Het resultaat is een woordenboek, met als sleutel het etiket van een ouder en als waarde de verzameling (Python set) van de bijhorende kinderenetiketten.wortel()
: deze methode heeft als enig argument een woordenboek dat een boom voorstelt (formaat zoals hierboven aangegeven). Het resultaat is het etiket van de wortelknoop van de boom (dus van het type str
). Je mag ervan uitgaan dat de argumentboom
correct is en er dus steeds precies één wortelknoop is.alle_kinderen()
: deze methode heeft 2 argumenten, namelijk een woordenboek dat een boom voorstelt (formaat zoals hierboven weergegeven). Het tweede argument is een etiket van een knoop in de boom (dus type str
). Het resultaat is een verzameling (Python set) van alle afstammelingen (over alle generaties) van die argumentknoop. Het resultaat is dus een verzameling van string.h -> p,c m -> d l -> e j -> b,k rr -> i,l i -> n a -> g,o,f n -> m,a,j e -> hInhoud van 'OudersKind_1.txt'
h -> o,d,e,j l -> h,i,c j -> g i -> p,f c -> b,m,n,a,k r -> lInhoud van 'OudersKind_2.txt'
p -> g,n,f,k k -> m,e,j o -> d a -> h,i,l c -> b r -> o,a,p,c
>>> lees_boom('OudersKind_0.txt') #{'n': {'m', 'j', 'a'}, 'rr': {'l', 'i'}, 'e': {'h'}, 'i': {'n'}, 'j': {'b', 'k'}, 'h': {'c', 'p'}, 'm': {'d'}, 'l': {'e'}, 'a': {'o', 'f', 'g'}} >>> lees_boom('OudersKind_1.txt') #{'c': {'n', 'm', 'b', 'a', 'k'}, 'j': {'g'}, 'i': {'f', 'p'}, 'r': {'l'}, 'h': {'o', 'e', 'j', 'd'}, 'l': {'h', 'c', 'i'}} >>> lees_boom('OudersKind_2.txt') #{'c': {'b'}, 'p': {'n', 'k', 'f', 'g'}, 'r': {'o', 'a', 'p', 'c'}, 'o': {'d'}, 'a': {'h', 'l', 'i'}, 'k': {'m', 'e', 'j'}}
wortel({'j': {'k', 'b'}, 'e': {'h'}, 'rr': {'i', 'l'}, 'i': {'n'}, 'n': {'a', 'j', 'm'}, 'h': {'c', 'p'}, 'm': {'d'}, 'a': {'o', 'g', 'f'}, 'l': {'e'}}) #rr wortel({'aaC': {'gg', 'aAa', 'ee', 'BB'}, 'jJ': {'aaa', 'DD'}, 'aBb': {'FF', 'cc', 'bbb'}, 'aa': {'ccc', 'aBb'}, 'ccc': {'jJ', 'aaC'}}) #aa wortel({'aaa': {'gg'}, 'aAa': {'aaa', 'bbb', 'ee'}, 'ee': {'jJ', 'aBb', 'BB'}}) #aAa
alle_kinderen({'r': {'l', 'h'}, 'd': {'c', 'b', 'o'}, 'l': {'j', 'd', 'f', 'e'}, 'e': {'a', 'n'}, 'h': {'p', 'i', 'g', 'm', 'k'}}, 'e') #{'a', 'n'} alle_kinderen({'a': {'b', 'k'}, 'i': {'m', 'd', 'j'}, 'l': {'p', 'h'}, 'rr': {'g', 'n'}, 'e': {'a', 'f', 'o'}, 'o': {'c'}, 'g': {'e'}, 'n': {'i', 'l'}}, 'e') #{'a', 'o', 'k', 'c', 'f', 'b'} #alle_kinderen({'a': {'g', 'n'}, 'd': {'a', 'l', 'h', 'f', 'o'}, 'f': {'m', 'c', 'b', 'e'}, 'h': {'k'}, 'r': {'d'}, 'o': {'p', 'i', 'j'}}, 'h') {'k'}