J'ai un arbre binaire, où chaque noeud stocke une donnée (self.pred
). Je veux écrire une fonction qui pour chaque feuille dans l'arbre, retourne une liste des données (qui est une fonction lambda) dans les noeuds visités pour atteindre cette feuille.Obtenir la liste de tous les chemins qui conduisent à la feuille en Python
Par exemple, je veux la fonction appelée sur cet arbre:
A
/\
B C
/\/\
1 2 3 4
pour revenir:
returned_list = [
[A, B, 1]
[A, B, 2]
[A, C, 3]
[A, C, 4]
]
Pour pense plus compliqué, suite à la branche de droite pour atteindre une donnée doit renvoie l'inverse de la fonction lambda stockée en tant que donnée de ce nœud.
Par exemple, lorsque A'
est not(A)
, la liste suivante doit être retourné:
returned_list = [
[A, B, 1]
[A, B', 2]
[A', C, 3]
[A', C', 4]
]
Voici ce que j'ai jusqu'à présent:
class Node:
def __init__(self, pred):
self.parent = None
self.left = None
self.right = None
self.pred = pred
def build_tree(pred_choices, k):
if k == 0:
return Node(get_pred())
else:
node = Node(get_pred())
node.left = build_tree(pred_choices, k-1)
node.right = build_tree(pred_choices, k-1)
return node
def get_paths(root, cur_path, all_paths):
if (root.left == None and root.right == None): # If leaf, append current path
all_paths.append(cur_path)
else:
get_paths(root.left, cur_path.append(root.pred), all_paths)
get_paths(root.right, cur_path.append(lambda x: not(root.pred(x)), all_paths)
return all_paths
def auto_tree_build(pred_choices, k):
root = build_tree(pred_choices, k)
all_paths = get_paths(root, [], [])
return all_paths
Mais le code ci-dessus ne fonctionne pas, et je ne comprends pas sa sortie. Quelqu'un peut-il m'aider à faire le code ci-dessus exécuter le comportement décrit?
Quelle est la question? –