Python 二叉搜索树中的Add方法工作不正常
因此,我的二进制类中的add方法似乎工作正常,但当我尝试运行测试时,它完全是错误的。例如:Python 二叉搜索树中的Add方法工作不正常,python,Python,因此,我的二进制类中的add方法似乎工作正常,但当我尝试运行测试时,它完全是错误的。例如: class Node: def __init__(self, data=None): self.data = data self.left_child = None self.right_child = None self.parent = None self.root = None class binary:
class Node:
def __init__(self, data=None):
self.data = data
self.left_child = None
self.right_child = None
self.parent = None
self.root = None
class binary:
def __init__(self):
self.root = None
def add(self, data):
if (self.root == None):
self.root = Node(data)
else:
self._insert(data, self.root)
def _insert(self, data, curNode):
if (curNode.data > data):
if (curNode.left_child == None):
curNode.left_child = Node(data)
else:
self._insert(data, curNode.left_child)
else:
if (curNode.right_child == None):
curNode.right_child = Node(data)
else:
self._insert(data, curNode.right_child)
这将返回17。当它应该返回300
知道为什么会这样吗?我看了一下我的代码,一切似乎都正常工作。几乎可以肯定,您没有显示的代码有问题,因为以下代码正是您需要的,输出长度为300:
test = BinarySearchTree()
seed(5)
testdata = sample(range(1, 2000), k=300)
for num in testdata:
test.add(num)
print(len(test))
即使在更新中为
节点
添加了代码,树类型中似乎也没有\uu len\uu
方法,dunder方法是获取集合长度的先决条件
此外,节点具有根值是非常罕见的,而且在任何情况下,您似乎从未将root
或parent
设置为任何值
因此,从代码中获得可行和/或合理的东西的步骤是:
- 正确命名你的班级。您将其称为
,但实例化binary
BinarySearchTree
- 从
类中删除多余的节点
和父类
,除非您计划使用它们根类
- 实现
dunder方法,这样您就可以实际获得长度\uuu len\uuu
- 与
相比,尝试使用None
,这是首选方法is
- 可选,基于首选项:尽量不要污染名称空间,最好
并显式命名要调用的内容(如导入random
),而不要用random.seed
中的项目污染普通名称空间random
- 可选,风格问题:不要求条件表达式用括号括起来(如在类C语言中)。我的意见是,这有损于简单条件句的可读性,因此我更喜欢
而不是if x==0
if(x==0)
节点
和递归计数器
的代码包括在内?BinarySearchtree
是否与binary
相同?您的示例无法按原样复制。请包含完整的代码。另外,确保函数名和函数调用正确。随机测试用例不可重复。请提供预期的测试用例。显示中间结果与预期结果的差异。编辑以添加方法
import random
class Node:
def __init__(self, data):
self.data = data
self.left_child = None
self.right_child = None
class BinarySearchTree:
def __init__(self):
self.root = None
def add(self, data):
if self.root is None:
self.root = Node(data)
else:
self._insert(data, self.root)
def _insert(self, data, curNode):
if curNode.data > data)
if curNode.left_child is None:
curNode.left_child = Node(data)
else:
self._insert(data, curNode.left_child)
else:
if curNode.right_child is None:
curNode.right_child = Node(data)
else:
self._insert(data, curNode.right_child)
def _count(self, curNode):
if curNode is None: return 0
return self._count(curNode.left_child) + 1 + self._count(curNode.right_child)
def __len__(self):
return self._count(self.root)
test = BinarySearchTree()
seed(5)
for num in sample(range(1, 2000), k=300):
test.add(num)
print(len(test))