2009-11-08 4 views
1

un arbre n-aire est mémorisé de la façon suivante:Nombre de niveaux dans un arbre en LISP

(node (list-subtree-1) (list-subtree-2) ...) 

A titre d'exemple, l'arbre

A 
/\ 
B C 
/\ 
D E 

est représentée comme suit: (a (B) (C (D) (E)))

Retourner le nombre de niveaux d'un arbre

le problème est que je Je suis seulement autorisé à utiliser les fonctions suivantes: null, voiture, cdr, égal, atome, nombre, contre, cadr, cadr, fonctions cond et arithmétique. Quelqu'un pourrait-il me donner une fonction pour retourner les niveaux de ce genre d'arbre?

+0

Je devais aussi revenir au niveau d'un certain nœud donné, et je l'ai fait comme ceci: (defun lvl (noeud lk) (cond ((null l) 1) ((égal (voiture l) nœud) k) (t (* (nœud lvl (cadr l) (+ k 1)) (nœud lvl (caddr l) (+ k 1)))) ) cela fonctionne, mais je ne peux pas modifiez-le pour retourner le nombre de niveaux de l'arbre ...) –

+1

Est-ce que ce travail est fait? – Flinkman

+0

partie d'un projet pour l'université –

Répondre

1

Je vais vous donner quelques conseils:

  • Le nombre de niveaux inférieurs et y compris le nœud racine dépend du plus grand nombre de niveaux inférieurs et y compris les sous-nœud direct du nœud racine. L'arité de l'arbre semble être inconnue/arbitraire, vous devrez donc trouver un moyen de stocker la profondeur du sous-arbre le plus profond actuellement trouvé tout en réduisant le nombre de sous-nœuds à examiner.

Questions connexes