📅  最后修改于: 2023-12-03 15:36:03.999000             🧑  作者: Mango
二进制搜索树(Binary Search Tree,BST)是一种常见的数据结构,它的定义如下:
在BST中查找元素的时间复杂度是O(h),其中h是BST的高度。因此,为了使查找效率高,我们需要保证BST的高度尽量小。一种方法是保证节点的平衡性,例如红黑树、AVL树等。另一种方法是根据具体情况来选择一个合适的插入顺序。
例如,如果我们按照楼层数来构建BST,则我们可以按照如下方式进行插入:
下面是一个根据楼层数构建BST和查找某个楼层的示例代码:
class Node:
def __init__(self, floor=None, left=None, right=None):
self.floor = floor
self.left = left
self.right = right
class BST:
def __init__(self):
self.root = None
def insert(self, floor):
if self.root is None:
self.root = Node(floor)
else:
self._insert(self.root, Node(floor))
def _insert(self, node, new_node):
if new_node.floor > node.floor:
if node.right is None:
node.right = new_node
else:
self._insert(node.right, new_node)
elif new_node.floor < node.floor:
if node.left is None:
node.left = new_node
else:
self._insert(node.left, new_node)
def search(self, floor):
return self._search(self.root, floor)
def _search(self, node, floor):
if node is None or node.floor == floor:
return node
elif node.floor > floor:
return self._search(node.left, floor)
else:
return self._search(node.right, floor)
该BST的节点包含楼层数,因此在查找时只需要按照楼层数比较即可。例如,我们可以插入若干个楼层,并查找某个楼层是否存在:
bst = BST()
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(1)
bst.insert(4)
bst.insert(6)
bst.insert(8)
print(bst.search(3)) # Node(floor=3, left=Node(floor=1), right=Node(floor=4))
print(bst.search(10)) # None
如上所示,我们可以根据楼层数构建BST,并实现查找某个楼层的方法。当然,如果涉及到其他操作,例如按照面积、售价等构建BST,也可以参照上述方式进行。