python3:二叉搜索树,sizefunction不返回节点数

2024-04-26 12:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现一个(递归的)二叉搜索树,而size函数无法工作。这是我目前的代码:

class BinarySearchTreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

    def __str__(self):
        return str(self.data)

    def add(self, data):
        if self.data == data:
            return False
        elif data < self.data:
            if self.left:
                return self.left.add(data)
            else:
                self.left = BinarySearchTreeNode(data)
                return True
        else:
            if self.right:
                return self.right.add(data)
            else:
                self.right = BinarySearchTreeNode(data)
                return True

    def contains(self, data):
        if self.data == data:
            return True
        elif self.data > data:
            if self.left:
                return self.left.contains(data)
            else:
                return False
        else:
            if self.right:
                return self.right.contains(data)
            else:
                return False

    def size(self):
        if self.left and self.right:
            return 1 + self.left.size() + self.right.size()
        elif self.left:
            return 1 + self.left.size()
        elif self.right:
            return 1 + self.right.size()
        else:
            return 1


class BinarySearchTree:

    def __init__(self):
        self.root = None

    def add(self, data): 
        if not self.root:
            self.root = BinarySearchTreeNode(data)
            return True
        else:
            return self.root.add(data)

    def contains(self, data):
        if self.root:
            return self.root.contains(data)
        else:
            return False

    def clear(self):
        self.root = None

    def size(self):
        if self.root is None:
            return 0
        else:
            return self.root.size()


bst = BinarySearchTree()

bst.add(3)
bst.add(24)
bst.add(7)
bst.add(15)
bst.add(2)
bst.add(19)

bst.size()

我希望size函数从BinarySearchTree类调用,但通过BinarySearchTreeNode类执行。我想尽了一切办法,但都没用。我做错什么了?你知道吗


Tags: selfrightnoneadddatasizereturnif
1条回答
网友
1楼 · 发布于 2024-04-26 12:26:36

这是什么?你知道吗

class BinarySearchTreeNode:

    self.data = data
    self.left = None
    self.right = None

这不是你正在做的初始化过程。请尝试以下操作:

class BinarySearchTreeNode:

    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

甚至帮你检查过:

In[1]: 
bst = BinarySearchTree()
bst.add(3)
bst.add(24)
bst.add(7)
bst.add(15)
bst.add(2)
bst.add(19)
bst.size()
Out[2]: 6

相关问题 更多 >