(Python)从二叉树中交替输入?

时间:2018-10-17 21:17:19

标签: python tree binary binary-tree

因此,我刚刚开始攻读本学位课程的内容,并且正在学习Python。这周我们的任务之一是使用一棵二叉树并添加访客,让该树左右交替,然后打印左右过道访客的名字。

我们的教授为我们提供了一些示例代码,并且进行了一些更改以使其能够执行我想做的事情。这是我所拥有的:

guestnumber = 0
class Node:
    def __init__(self):
        self.left = None
        self.right = None
        self.data = list()

def guestadd(root, Guest):
    if Guest <= root.data[0]:
        if root.left == None:
            root.left = Node()
            root.left.data.append(Guest)
        else:
            guestadd(root.left, Guest)
    else:
        if Guest >= root.data[0]:
            if root.right == None:
                root.right = Node()
                root.right.data.append(Guest)
            else:
                guestadd(root.right, Guest)

def printlist(root):
    if root == None:
        return
    print(root.data)
    printlist(root.left)
    printlist(root.right)

print("Enter guest names for seating arrangements. (Max = 50)")
guestnumber = int(input("How many guests are attending?"))
root = Node()
root.data.append("Guest")
for i in range (0,guestnumber):
    guestadd (root, input("Name:"))

print("Left Aisle:")
printlist(root.left)
print("Right Aisle:")
printlist(root.right)

乍一看,一切都按预期进行,但我注意到结果不一致,导致名称没有均匀地分开。睡了之后,我进行了一些更多的故障排除,发现无论以什么顺序将数据放入,它总是将0-9,AG和少数特殊字符放在左侧节点上,并将HZ,az,右侧还有少数特殊字符。

我已经提交了我所拥有的内容以及一些发现的屏幕截图,因此我相信我会得到充分的肯定,因为这是一门入门课程。但是令我烦恼的是,我无法让它始终如一地完成我想做的事情。

我最好的猜测是,它与字符在ASCII图表上的位置有关。从0-71的所有内容都在左侧,在72-127的右侧。我将如何让我的程序将字符串视为字符串而又不考虑ASCII?

注意:如果让我执行此任务以分隔来宾,则不会使用树。我可能会使用仅将名称添加到列表中的内容,然后使用[:: 2]和[1 :: 2]切片作为替代。但是,由于该任务是学习如何使用二叉树,因此我想遵守本课的限制

1 个答案:

答案 0 :(得分:1)

您的代码中没有左右交替的内容。您已经建立了一个以“来宾”为根的二元 search 树。姓名按Unicode词典顺序在“来宾”之前的任何人都位于左侧,姓名按Unicode词典顺序在“来宾”之后的任何人都在右侧。