首页 文章

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

提问于
浏览
1

所以我刚开始获得学位的肉和土 beans ,我正在学习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 回答

  • 1

    您的代码中没有关于左右交替的内容 . 您已在根目录下使用"Guest"构建了二叉搜索树 . 名称以_字体顺序"Guest"之前以Unicode字典顺序排列的任何人都在左侧,任何名字以_字体顺序排列在"Guest"之后的人都在右侧 .

相关问题