(Python)二叉树的交替输入?

2024-09-28 23:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我刚刚开始我的学位,我正在学习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,A-G,和一些特殊字符放在左侧节点上,把H-Z,A-Z,和另一些特殊字符放在右侧节点上。你知道吗

我已经交了我所拥有的东西,还有我的发现的几个截图,所以我相信我会得到满分,因为这是一门入门课程。但让我烦恼的是,我不能让它始终如一地做我想做的事。你知道吗

我最好的猜测是,它与字符在ASCII图表上的位置有关。从0-71到72-127都在左边。我该如何让我的程序将字符串视为那样,而不是用ASCII来考虑它呢?你知道吗

注意:如果把这个任务交给不同的客人,我就不用树了。我可能会使用一些只向列表中添加名称的方法,然后使用[::2]和[1::2]切片来替换边。然而,由于作业是学习如何使用二叉树,我想继续学习本课的限制条件


Tags: selfrightnonenodedataifdefroot
1条回答
网友
1楼 · 发布于 2024-09-28 23:14:45

你的代码里没有左右交替的内容。您已经构建了一个二进制搜索树,根目录下有“Guest”。任何名字在Unicode字典顺序中排在“Guest”前面的人都在左边,任何名字在Unicode字典顺序中排在“Guest”后面的人都在右边。你知道吗

相关问题 更多 >