Python TreeNode如何实现树的AVL树

   2024-10-01 8470
核心提示:在Python中实现AVL树,需要定义一个TreeNode类来表示树的节点,然后定义一个AVLTree类来实现AVL树的操作。class TreeNode:def __

在Python中实现AVL树,需要定义一个TreeNode类来表示树的节点,然后定义一个AVLTree类来实现AVL树的操作。

class TreeNode:    def __init__(self, key):        self.key = key        self.left = None        self.right = None        self.height = 1class AVLTree:    def __init__(self):        self.root = None    def insert(self, key):        self.root = self._insert(self.root, key)    def _insert(self, node, key):        if not node:            return TreeNode(key)                if key < node.key:            node.left = self._insert(node.left, key)        else:            node.right = self._insert(node.right, key)        node.height = 1 + max(self._get_height(node.left), self._get_height(node.right))                balance = self._get_balance(node)        # 左旋        if balance > 1 and key < node.left.key:            return self._rotate_right(node)        # 右旋        if balance < -1 and key > node.right.key:            return self._rotate_left(node)        # 左右旋        if balance > 1 and key > node.left.key:            node.left = self._rotate_left(node.left)            return self._rotate_right(node)        # 右左旋        if balance < -1 and key < node.right.key:            node.right = self._rotate_right(node.right)            return self._rotate_left(node)        return node    def _get_height(self, node):        if not node:            return 0        return node.height    def _get_balance(self, node):        if not node:            return 0        return self._get_height(node.left) - self._get_height(node.right)    def _rotate_left(self, z):        y = z.right        T2 = y.left        y.left = z        z.right = T2        z.height = 1 + max(self._get_height(z.left), self._get_height(z.right))        y.height = 1 + max(self._get_height(y.left), self._get_height(y.right))        return y    def _rotate_right(self, z):        y = z.left        T3 = y.right        y.right = z        z.left = T3        z.height = 1 + max(self._get_height(z.left), self._get_height(z.right))        y.height = 1 + max(self._get_height(y.left), self._get_height(y.right))        return y

以上是AVL树的Python实现代码,包括了插入节点和旋转操作。可以根据需要进一步实现删除节点、查找节点等操作。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号