2016-02-02 4 views
0

Я только что начал программировать на Python, поэтому помните, что я, возможно, пропустил что-то basic.I попытался создать свое первое двоичное дерево в Python3, и все кажется прекрасным. Следующий шаг пытался напечатать мое дерево (inorder), но это просто приводит к двум пробелам. Любые мысли, где я совершил ошибку?Python - Двоичное дерево - невозможно распечатать дерево

class Node: 
    def __init__(self, newvalue): 
     self.left=None 
     self.right=None 
     self.newvalue=newvalue 


class Tree: 
    def __init__(self): 
     self.root=None 

    def put(self, newvalue): 
     self.root=puter(self.root, newvalue) 


    def write(self): 
     writer(self.root) 
     print("\n") 

def writer(root): 
    if root != None: 
     writer(root.left) 
     print(root.newvalue) 
     writer(root.right) 


def puter(root, newvalue): 
    if root == None: 
     root = Node(newvalue) 
    else: 
     if newvalue < root: 
      if root.left != None: 
       puter(newvalue, root.left) 
      else: 
       root.left=Node(newvalue) 
     else: 
      if root.right !=None: 
       puter(newvalue, root.right) 
      else: 
       root.right = Node(newvalue) 



tree = Tree() 
tree.put("bird") 
tree.put("snake") 
tree.put("lion") 
tree.put("elephant") 
tree.put("snail") 
tree.write() 

С наилучшими пожеланиями,

ответ

0

У вас было что-то не так. Вы не возвращали корень в puter, как упоминалось в kfx. Но ваши входные аргументы в puter были обратными, puter(newvalue, root.right) должен быть puter(root.right, newvalue) и puter(newvalue, root.left) должен быть puter(root.left, newvalue). Этот код печатает дерево:

class Node: 
    def __init__(self, newvalue): 
     self.left = None 
     self.right = None 
     self.newvalue = newvalue 


class Tree: 
    def __init__(self): 
     self.root = None 

    def put(self, newvalue): 
     self.root = puter(self.root, newvalue) 


    def write(self): 
     writer(self.root) 
     print("\n") 

def writer(root): 
    if root != None: 
     writer(root.left) 
     print(root.newvalue) 
     writer(root.right) 


def puter(root, newvalue): 
    if root == None: 
     root = Node(newvalue) 
    else: 
     if newvalue < root: 
      if root.left != None: 
       puter(root.left, newvalue) 
      else: 
       root.left=Node(newvalue) 
     else: 
      if root.right !=None: 
       puter(root.right, newvalue) 
      else: 
       root.right = Node(newvalue) 
    return root 


tree = Tree() 
tree.put("bird") 
tree.put("snake") 
tree.put("lion") 
tree.put("elephant") 
tree.put("snail") 
tree.write() 
+0

Фантастический, я вижу, где я совершил ошибки. Спасибо за помощь за помощь! – Raz89

0

Вы должны вернуть значение из puter функции.

def puter(root, newvalue): 
    ... 
    return root 

В противном случае ваш root член получает присваивается возвращаемое значение по умолчанию, которое None.

+0

А, я полностью пропустил это. Благодаря! – Raz89

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