Python - 二叉树 - 无法打印树

Python - Binary tree - unable to print the tree

我刚刚开始在 Python 中编程,所以请注意我可能遗漏了一些东西 basic.I 已经尝试在 Python3 中制作我的第一个二叉树并且一切看起来都很好。下一步是尝试打印我的树(有序),但这样做只会导致两个空格。有什么想法我犯了错误吗?

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()

此致,

您需要 return 来自 puter 函数的值。

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

否则,您的 root 成员将获得默认的 return 值,即 None

你有几处错误。您没有像提到的 kfx 那样在 puter 中返回 root。但是您对 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()