文章详情

一、什么是二叉搜索树(BST)

二叉搜索树(Binary Search Tree),简称BST,是一种特殊的二叉树。它具有性质:

1. 每个节点都有一个键值(key)。

2. 左子树上所有节点的键值均小于其根节点的键值。

3. 右子树上所有节点的键值均大于其根节点的键值。

4. 左、右子树也都是二叉搜索树。

二叉搜索树是一种非常高效的查找结构,其平均查找效率为O(log n),n为树中节点的数量。这是因为二叉搜索树具有递归性质,每次查找时都可以排除一半的节点,从而减少了查找的时间。

二、二叉搜索树的实现

下面是使用Python实现二叉搜索树的代码示例:

python

class TreeNode:

def __init__(self, key):

self.left = None

self.right = None

self.val = key

class BinarySearchTree:

def __init__(self):

self.root = None

# 插入节点

def insert(self, key):

if self.root is None:

self.root = TreeNode(key)

else:

self._insert(self.root, key)

def _insert(self, node, key):

if key < node.val:

if node.left is None:

node.left = TreeNode(key)

else:

self._insert(node.left, key)

else:

if node.right is None:

node.right = TreeNode(key)

else:

self._insert(node.right, key)

# 查找节点

def search(self, key):

return self._search(self.root, key)

def _search(self, node, key):

if node is None or node.val == key:

return node

if key < node.val:

return self._search(node.left, key)

return self._search(node.right, key)

# 删除节点

def delete(self, key):

self.root = self._delete(self.root, key)

def _delete(self, node, key):

if node is None:

return node

if key < node.val:

node.left = self._delete(node.left, key)

elif key > node.val:

node.right = self._delete(node.right, key)

else:

if node.left is None:

return node.right

elif node.right is None:

return node.left

min_larger_node = self._find_min(node.right)

node.val = min_larger_node.val

node.right = self._delete(node.right, min_larger_node.val)

return node

def _find_min(self, node):

while node.left is not None:

node = node.left

return node

# 遍历节点

def inorder_traversal(self):

self._inorder_traversal(self.root)

def _inorder_traversal(self, node):

if node:

self._inorder_traversal(node.left)

print(node.val, end=' ')

self._inorder_traversal(node.right)

# 测试代码

bst = BinarySearchTree()

bst.insert(50)

bst.insert(30)

bst.insert(20)

bst.insert(40)

bst.insert(70)

bst.insert(60)

bst.insert(80)

print("Inorder traversal of the given tree:")

bst.inorder_traversal() # 输出:20 30 40 50 60 70 80

print("\nDelete 20")

bst.delete(20)

print("Inorder traversal after deleting 20:")

bst.inorder_traversal() # 输出:30 40 50 60 70 80

print("\nDelete 30")

bst.delete(30)

print("Inorder traversal after deleting 30:")

bst.inorder_traversal() # 输出:40 50 60 70 80

print("\nDelete 50")

bst.delete(50)

print("Inorder traversal after deleting 50:")

bst.inorder_traversal() # 输出:40 60 70 80

这段代码中,我们定义了一个`TreeNode`类来表示树中的节点,以及一个`BinarySearchTree`类来实现二叉搜索树的基本操作,如插入、查找、删除和遍历。在测试代码中,我们创建了一个二叉搜索树,并进行了插入、删除和遍历操作。

三、

二叉搜索树是一种常见的二叉树结构,具有高效查找和插入的特点。在计算机专业面试中,了解二叉搜索树的基本概念和实现方法是必不可少的。通过上述代码示例,我们可以更好地理解二叉搜索树的结构和操作,为面试做好准备。

发表评论
暂无评论

还没有评论呢,快来抢沙发~