Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 二叉搜索树中的Add方法工作不正常_Python - Fatal编程技术网

Python 二叉搜索树中的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:

因此,我的二进制类中的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:
    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
  • 节点
    类中删除多余的
    父类
    根类
    ,除非您计划使用它们
  • 实现
    \uuu len\uuu
    dunder方法,这样您就可以实际获得长度
  • 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))