📜  二进制搜索树(BST)中的楼层(1)

📅  最后修改于: 2023-12-03 15:36:03.999000             🧑  作者: Mango

二进制搜索树(BST)中的楼层

二进制搜索树(Binary Search Tree,BST)是一种常见的数据结构,它的定义如下:

  1. 每个节点都存储一个关键字(Key)。
  2. 左子树中所有节点关键字都小于当前节点的关键字。
  3. 右子树中所有节点关键字都大于当前节点的关键字。
  4. 没有重复的节点。

在BST中查找元素的时间复杂度是O(h),其中h是BST的高度。因此,为了使查找效率高,我们需要保证BST的高度尽量小。一种方法是保证节点的平衡性,例如红黑树、AVL树等。另一种方法是根据具体情况来选择一个合适的插入顺序。

例如,如果我们按照楼层数来构建BST,则我们可以按照如下方式进行插入:

  1. 如果当前节点为null,则新建节点并赋值。
  2. 如果当前节点的楼层数比待插入节点的楼层数小,则遍历右子树。
  3. 如果当前节点的楼层数比待插入节点的楼层数大,则遍历左子树。

下面是一个根据楼层数构建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,也可以参照上述方式进行。