2015-12-21 6 views
-1

Я изучаю python, так как один из моих требований к проекту - печатать двоичное дерево.Печать пути дерева

Я пробовал свой код для печати пути к дереву. Он просто останавливается у корневого узла. Я пытаюсь найти, где я испортился.

Дерево:

 A 
    /\ 
    B C 
//\ 
D E F 

Выход я хочу это:

ABD

ACE

ACF

class Node(object): 
    def __init__(self, data): 
     self.data = data 
     self.children = [] 
     self.val = data 
     self.left = None 
     self.right = None 


r = Node('A') 
r.left = Node('B') 
r.right = Node('C') 
r.left.left = Node('D') 
r.right.right = Node('E') 

выше должна быть r.right.left = Node ('E) r.right.right = Node (' F ')

def binaryTreePaths(root): 
     results = [] 
     c = [] 
     binary_tree_paths(root, c, results) 
     return results 

def binary_tree_paths(root, cand, res): 
    if root is None: 
     return 
    else: 
     cand.append(str(root.val)+" ") 
     if root.left is None and root.right is None: 
      p = ''.join(map(str, cand)) 
      res.append(p) 
     binary_tree_paths(root.left, cand, res) 
     binary_tree_paths(root.right, cand, res) 
     cand.pop() 

print binaryTreePaths(r) 
+0

If это двоичное дерево, у вас должны быть левые и правые ветви не массивом 'children'. – ozgur

+0

@ozgur - Вы абсолютно правы. Я испортил свой код при инициализации дерева. – paddu

+0

@ozgur. Я исправил код. Тем не менее он печатает только ['A B D', 'A C F'] – paddu

ответ

1

Вы должны r.right.left = Node('E'), вместо r.right.right = Node('E')

+0

@pm - Просто нашел его. Спасибо за помощь – paddu

Смежные вопросы