📅  最后修改于: 2023-12-03 15:12:43.759000             🧑  作者: Mango
这是一道考试中的编程问题,题目要求实现一个虚拟的二叉搜索树,支持添加节点、查询某个节点是否存在、以及计算树中节点的个数等基本操作。
为了解决这个问题,我们可以使用Python实现一个类,表示二叉搜索树:
class Node:
def __init__(self, value):
self.left = None
self.right = None
self.value = value
class BinarySearchTree:
def __init__(self):
self.root = None
self.count = 0
def add(self, value):
if self.root is None:
self.root = Node(value)
else:
self._add(value, self.root)
self.count += 1
def _add(self, value, node):
if value < node.value:
if node.left is None:
node.left = Node(value)
else:
self._add(value, node.left)
else:
if node.right is None:
node.right = Node(value)
else:
self._add(value, node.right)
def contains(self, value):
return self._contains(value, self.root)
def _contains(self, value, node):
if node is None:
return False
elif node.value == value:
return True
elif value < node.value:
return self._contains(value, node.left)
else:
return self._contains(value, node.right)
def size(self):
return self.count
上述代码中,我们定义了两个类,一个表示节点(Node),另一个表示二叉搜索树(BinarySearchTree)。其中,二叉搜索树包含一个根节点(root)和一个计数器(count),计数器用于统计树中节点的个数。
实现过程中,我们采用递归的方式向树中添加节点、查找某个节点是否存在以及计算节点的个数。具体地,添加节点的递归操作来自于节点在二叉搜索树中的排列顺序,如果节点的值小于当前节点,则将其插入当前节点的左子树,否则插入右子树。查询节点是否存在时,同样采用递归的方式,借助节点之间的大小关系,从根节点开始逐级比较。计算节点个数的方法即为计数器的值。
我们可以测试一下实现的这个二叉搜索树:
tree = BinarySearchTree()
tree.add(5)
tree.add(3)
tree.add(7)
print(tree.contains(3))
print(tree.contains(8))
print(tree.size())
以上代码中,我们先创建一个二叉搜索树对象,依次向树中添加了值为5、3和7的节点,然后分别测试树中是否包含值为3和8的节点,最后输出树中节点的个数。运行结果如下:
True
False
3
至此,我们就完成了这道考试题目的实现。