我正在尝试实现BST,但是我的树的head值每次都返回无。我尝试在Python中查找其他实现,但它们通常只是声明一个根并将其传递到类本身之外,而不是将head自包含在类中。
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def __repr__(self):
return self.data
def __str__(self):
return str(self.data)
class Tree:
def __init__(self, nodes):
self.head = None
if nodes is not None:
for elem in nodes:
self.insert(self.head, elem)
print(self.head) #prints out None every time
def insert(self, currentNode, data):
if(currentNode == None):
currentNode = Node(data)
if(data != currentNode.data):
if(data < currentNode.data):
if(currentNode.left is None): currentNode.left = Node(data)
else: self.insert(currentNode.left, data)
elif(data > currentNode.data):
if(currentNode.right is None): currrentNode.right = Node(data)
else: self.insert(currentNode.right, data)
def inOrder(self, data=None, visitedHead=False):
if not visitedHead:
self.inOrder(self.head.left, True)
print(self.head)
self.inOrder(self.head.right, True)
elif(data == None): return
else:
self.inOrder(data.left, True)
print(data)
self.inOrder(data.right, True)
treeTime = Tree([1, 80, 3, 0])
正如@MarkMeyer所指出的,loctNode=Node(data)
只创建一个局部变量。因此,您需要将curretNode变量返回给调用者,并通过返回的变量更新节点。
当您修复四行(#1到#4)时,您将获得所需的结果。
class Tree:
def __init__(self, nodes):
self.head = None
if nodes is not None:
for elem in nodes:
self.head = self.insert(self.head, elem) #1 Update the head
print(self.head) #prints out None every time
print(self.head.left)
print(self.head.right)
print(self.head.right.left)
def insert(self, currentNode, data):
if(currentNode == None):
currentNode = Node(data)
if(data != currentNode.data):
if(data < currentNode.data):
if(currentNode.left is None): currentNode.left = Node(data)
else: currentNode.left = self.insert(currentNode.left, data) #2 Update the left node
elif(data > currentNode.data):
if(currentNode.right is None): currentNode.right = Node(data)
else: currentNode.right = self.insert(currentNode.right, data) #3 Update the right node
return currentNode #4 Return the currentNode
这是结果。
1 # head
0 # head.left
80 # head.right
3 # head.right.left
我创建了一个二叉查找树类。我创建了我的插入方法、高度方法和打印方法。当我插入时,一切看起来都很好。如果根为空,我创建一个新的根并设置该项目。但是当我调用我的高度方法时,它打印出2而不是1。当我调用print方法时,它会两次打印出包括root在内的所有元素。例如,我按以下顺序插入了以下元素:9, 5, 4, 55, 555 当我调用PREorderPRINT方法时,它会输出:9, 5, 4, 9,
问题内容: 我今天在python中遇到了插入符号运算符,并对其进行了尝试,得到了以下输出: 它似乎基于8,所以我猜某种字节操作?除了对浮点数的奇怪表现之外,我似乎无法找到更多关于此搜索网站的信息,是否有人链接到该运算符的工作,或者您可以在此处进行解释? 问题答案: 这是按位异或(异或)。 如果 一个 操作数(仅一个)(评估为)为true,则结果为true。 展示: 要解释您自己的示例之一: 这样考
通常我们主要称之为insert,比如
我试图实现一个无隐层神经网络来破解MNIST数据集。 我使用sigmoid作为激活函数,交叉熵作为损失函数。 为了简单起见,我的网络没有隐藏层,只有输入和输出。 这是我实现反向传播算法的一部分,但它没有按预期工作。损失函数的下降速度非常慢(我尝试了学习率从0.001到1的变化),准确度永远不会超过0.1。 输出如下:
我被要求为基于hibernate的数据访问对象编写一些代码测试。 我想我会从一个简单的测试开始:当我保存一个模型时,它应该在返回的集合中。问题是,无论如何,当我调用时,它总是一个空集合。 应用程序代码已经在生产中工作,所以让我们假设问题只是出在我的测试代码上。 预期测试输出为: 到目前为止,我已经尝试在插入后显式提交,并禁用缓存,但这并不奏效。 我不想成为冬眠大师,也没有足够的时间阅读整个留档。在
我编写了以下代码来实现BST的递归插入方法。但是当我以遍历顺序打印树时,它会在插入之前打印原始树。似乎没有插入元素。请帮帮我。提前谢谢。另外,请建议更改代码。顺便说一下,初始树的遍历顺序是2 5 6 7 8。