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)
所以我的二进制类中的此add方法似乎正常工作,但是当我尝试运行测试时,这完全是错误的。例如:
test = BinarySearchTree()
seed(5)
testdata = sample(range(1, 2000), k=300)
for num in testdata:
test.add(num)
print(len(test))
这将返回17。应返回300。
知道为什么会这样吗?我看了看我的代码,一切似乎都正常运行。
答案 0 :(得分:0)
您没有显示的代码几乎肯定存在问题,因为以下代码完全可以满足您的需求,输出的长度为300:
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))
即使您在更新中为Node
添加了代码{em> ,树型中似乎也没有__len__
方法,dunder方法是能够获取集合的长度。
此外,节点具有根值是很不寻常的,在任何情况下,您似乎从未从未将root
或parent
设置为任何值。
因此,从代码中获取可行和/或明智的方法的步骤如下:
binary
,但实例化了BinarySearchTree
。parent
类中删除多余的root
和Node
。__len__
dunder方法,以便实际上可以获取长度。is
相比,尝试使用None
,这是首选方法。import random
并显式命名要调用的内容(例如random.seed
),而不要使用来自的项目污染普通的名称空间random
。if x == 0
而不是if (x == 0)
。