AVL树:模拟实现与操作

作者:rousong2024.02.16 00:07浏览量:15

简介:AVL树是一种自平衡二叉搜索树,通过旋转操作保持平衡。本文将详细介绍AVL树的模拟实现和常见操作,包括插入、删除和查找等。

在计算机科学中,AVL树是一种自平衡二叉搜索树,得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树通过旋转操作保持平衡,从而在插入、删除等操作时具有较好的性能。本文将通过代码模拟实现AVL树,并介绍其常见操作。

模拟实现

首先,我们定义一个节点类来表示AVL树中的节点。每个节点包含一个键值、左右子节点和高度。

  1. class Node:
  2. def __init__(self, key):
  3. self.key = key
  4. self.left = None
  5. self.right = None
  6. self.height = 1

接下来,我们定义AVL树类,包含插入、删除、查找等常用操作。

  1. class AVLTree:
  2. def __init__(self):
  3. self.root = None

插入操作

插入操作是AVL树的基本操作之一。我们首先定义一个辅助函数get_height来获取节点的高度。然后实现插入函数insert,该函数接受一个键值作为参数,并在AVL树中查找相应的位置来插入新节点。如果插入后导致不平衡,则通过旋转操作来恢复平衡。

  1. def get_height(self, node):
  2. if node is None:
  3. return 0
  4. return node.height
  5. def insert(self, key):
  6. if self.root is None:
  7. self.root = Node(key)
  8. else:
  9. self._insert_recursive(self.root, key)
  10. def _insert_recursive(self, node, key):
  11. if key < node.key:
  12. if node.left is None:
  13. node.left = Node(key)
  14. node.left.height = 1
  15. else:
  16. self._insert_recursive(node.left, key)
  17. else:
  18. if node.right is None:
  19. node.right = Node(key)
  20. node.right.height = 1
  21. else:
  22. self._insert_recursive(node.right, key)

查找操作

查找操作也是AVL树的基本操作之一。我们定义一个辅助函数get_min_value_node来获取指定节点下的最小值节点。然后实现查找函数search,该函数接受一个键值作为参数,并在AVL树中查找相应的节点。如果找到节点,则返回该节点;否则返回None。

  1. def get_min_value_node(self, node):
  2. current = node
  3. while current.left is not None:
  4. current = current.left
  5. return current