【问题标题】:Python - Binary tree - unable to print the treePython - 二叉树 - 无法打印树
【发布时间】:2016-02-03 02:13:37
【问题描述】:

我刚开始用 Python 编程,所以请注意我可能遗漏了一些基本的东西。我尝试用 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()

最好的问候,

【问题讨论】:

    标签: python tree binary-tree nodes


    【解决方案1】:

    你做错了几件事。您没有像 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()
    

    【讨论】:

    • 太棒了,我知道我在哪里犯了错误。非常感谢您的帮助,继续努力!
    【解决方案2】:

    你需要从puter函数返回一个值。

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

    否则您的root 成员将被分配默认返回值,即None

    【讨论】:

    • 啊,我完全错过了那个。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多