python - (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,AG,和少数特殊字符,而HZ,az,右边还有几个特殊字符。
我已经提交了我所拥有的,以及我发现的几张截图,所以我相信我会得到充分的信任,因为这是一门入门课程。但让我烦恼的是,我无法让它始终如一地做我想做的事。
我最好的猜测是它与字符在 ASCII 图表上的位置有关。从 0 到 71 的所有内容都在左侧,而 72-127 在右侧。我将如何让我的程序将字符串视为那样,而不是在 ASCII 中考虑它?
注意:如果给我这个任务来分隔客人,我不会使用树。我可能会使用只是将名称添加到列表中的东西,然后使用 [::2] 和 [1::2] 切片来交替边。但是,由于作业是学习如何使用二叉树,所以我想保持课程的约束
解决方案
您的代码中没有关于左右交替的内容。您已经构建了一个以“Guest”为根的二叉搜索树。在 Unicode 字典顺序中名字在“Guest”之前的任何人都在左边,而在 Unicode 字典顺序中名字在“Guest”之后的任何人都在右边。
推荐阅读
- c# - C# 与 CLI 进程的对话
- c - 我的代码有什么问题?CS50 Pset2:可读性
- asp.net-core - 在带有 Linux 的 AWS elasticbeanstalk 上安装多个 ASP.NET Core 服务会导致错误
- python - Tkinter - 如何将文本更改为图像?
- python - 用双引号转义双引号
- javascript - 画布:修改分辨率
- c# - Autofac 通用装饰器未触发(使用 mediatr)
- python-3.x - 为什么插入新元素后 ''.join(list1) 不起作用?
- c# - 在 SpecFlow 中的多个功能文件之间共享步骤声明
- r - 具有分类变量的多变量回归交互项