[python] attraversare un albero

Qui vengono spostati discussioni e messaggi ritenuti inadeguati per il contenuto o la forma con cui sono stati espressi.
Scrivi risposta
melissa92
Prode Principiante
Messaggi: 1
Iscrizione: mercoledì 25 novembre 2015, 14:19
Sesso: Femminile

[python] attraversare un albero

Messaggio da melissa92 »

jigen45 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4418680#p4418680][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Grazie mille per aver risposto. Già che ci sono posto tutte le specifiche del compito:
[code2=python]'''
Implementare una classe NodeTree, secondo lo schema qui sotto riportato, che permette di rappresentare
i nodi di un albero. Il costruttore prende come parametro il nome del nodo.
Poi ci sono i seguenti metodi:
- add_child(c) aggiunge c come figlio del nodo (si assume che c sia di tipo NodeTree)
- get_children() ritorna la lista dei nodi figli (di tipo NodeTree)
- height() ritorna l'altezza dell'albero
- count() ritorna il numero di nodi dell'albero
- count_by_name(name) ritorna il numero di nodi dell'albero con nome name.
Implementare inoltre la funzione create_tree(d) che preso un dizionario d che rappresenta un albero
crea un albero con i nodi di tipo NodeTree. Il dizionario d ha due chiavi: 'name' con valore il nome
del nodo e 'children' con valore la lista (eventualmente vuota) dei nodi figli (questi sono a loro
volta dizionari dello stesso tipo). La funzione deve aggiungere i figli nello stesso ordine in cui
sono elencati nelle liste delle chiavi 'children'.
Ecco un esempio. Se il dizionario d1 e'
d1 = {'name':'musica', 'children':[{'name':'rock', 'children':[{'name':'origini','children':[]},
{'name':'rock&roll','children':[]},
{'name':'hard rock', 'children':[]}]},
{'name':'jazz', 'children':[{'name':'origini', 'children':[{'name':'1900', 'children':[]}]},
{'name':'ragtime', 'children':[]}, {'name':'swing', 'children':[]}]}]}
L'albero rappresentato da d1 e'
_____________musica____________
| |
_________rock_________ ________jazz_______
| | | | | |
origini rock&roll hard rock origini ragtime swing
|
1900

Si deve avere che
tree = create_tree(d1)
tree.count() --> 10
tree.height() --> 4
tree.get_children()[0].count() --> 4
tree.get_children()[1].height() --> 3
tree.count_by_name('origini') --> 2

Un altro esempio
d2 = {'name':'html', 'children':[{'name':'head', 'children':[{'name':'meta', 'children':[]},
{'name':'title', 'children':[]},
{'name':'style', 'children':[]}]},
{'name':'body', 'children':[{'name':'h1', 'children':[]},
{'name':'section', 'children':[{'name':'p', 'children':[{'name':'strong', 'children':[]},
{'name':'b', 'children':[]},
{'name':'em', 'children':[]},
{'name':'i', 'children':[]}]},
{'name':'p', 'children':[{'name':'q', 'children':[]},
{'name':'code', 'children':[]},
{'name':'kbd', 'children':[]}]},
{'name':'p', 'children':[{'name':'sup', 'children':[]},
{'name':'sub', 'children':[]}]},
{'name':'p', 'children':[{'name':'span', 'children':[]}]}]},
{'name':'footer', 'children':[{'name':'a', 'children':[{'name':'strong', 'children':[]}]},
{'name':'a', 'children':[{'name':'strong', 'children':[]}]}]}]}]}
L'albero rappresentato da d2 e'
______________________html_____________________
| |
______head_____ ________________________________body________________________________
| | | | | |
meta title style h1 _________________section_________________ _footer_
| | | | | |
_______p_______ _____p_____ __p__ p a a
| | | | | | | | | | | |
strong b em i q code kbd sup sub span strong strong

Si deve avere che
tree = program01.create_tree(d2)
tree.count() --> 27
tree.height() --> 5
tree.get_children()[1].count() --> 22
tree.get_children()[1].height() --> 4
tree.count_by_name('p') --> 4
'''

class NodeTree(object):
'''Scrivere il costruttore qui'''

'''Definire i metodi qui'''

def create_tree(d):
'''Implementare la funzione qui'''[/code2]

Ho fatto copia-incolla, così come è scritto. :)


Ciao scusami ho il tuo stesso esercizio all università ma non riesco a venirne a capo potresti darmi qualche informazione? Dovrei consegnarlo entro stasera. Grazie In anticipo
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40351
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: [python] attraversare un albero

Messaggio da steff »

Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
Scrivi risposta

Ritorna a “Quarantena”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite