91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Python TreeNode如何實現樹的平衡

小樊
81
2024-08-17 16:24:40
欄目: 編程語言

在Python中實現樹的平衡可以通過實現平衡二叉樹(AVL樹)來實現。AVL樹是一種自平衡二叉搜索樹,即樹的每個節點的左子樹和右子樹的高度差不超過1。

下面是一個簡單的Python實現:

class TreeNode:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None
        self.height = 1

class AVLTree:
    def getHeight(self, node):
        if not node:
            return 0
        return node.height

    def getBalance(self, node):
        if not node:
            return 0
        return self.getHeight(node.left) - self.getHeight(node.right)

    def rotateRight(self, y):
        x = y.left
        T = x.right

        x.right = y
        y.left = T

        y.height = 1 + max(self.getHeight(y.left), self.getHeight(y.right))
        x.height = 1 + max(self.getHeight(x.left), self.getHeight(x.right))

        return x

    def rotateLeft(self, x):
        y = x.right
        T = y.left

        y.left = x
        x.right = T

        x.height = 1 + max(self.getHeight(x.left), self.getHeight(x.right))
        y.height = 1 + max(self.getHeight(y.left), self.getHeight(y.right))

        return y

    def insert(self, root, key):
        if not root:
            return TreeNode(key)
        elif key < root.key:
            root.left = self.insert(root.left, key)
        else:
            root.right = self.insert(root.right, key)

        root.height = 1 + max(self.getHeight(root.left), self.getHeight(root.right))

        balance = self.getBalance(root)

        if balance > 1 and key < root.left.key:
            return self.rotateRight(root)
        
        if balance < -1 and key > root.right.key:
            return self.rotateLeft(root)
        
        if balance > 1 and key > root.left.key:
            root.left = self.rotateLeft(root.left)
            return self.rotateRight(root)
        
        if balance < -1 and key < root.right.key:
            root.right = self.rotateRight(root.right)
            return self.rotateLeft(root)

        return root

使用上述代碼可以創建一個AVL樹,然后通過調用insert方法向樹中插入新節點,保持樹的平衡。

0
广宁县| 梁河县| 雷山县| 巩留县| 神池县| 涡阳县| 崇明县| 宣武区| 理塘县| 长丰县| 延川县| 莱芜市| 阳泉市| 原阳县| 鸡西市| 汤阴县| 中江县| 阿鲁科尔沁旗| 卢氏县| 海晏县| 彭泽县| 隆回县| 甘泉县| 玉田县| 灵石县| 辽阳县| 永嘉县| 汤原县| 和平区| 崇左市| 阳春市| 高淳县| 博客| 正安县| 上林县| 蛟河市| 英吉沙县| 登封市| 临漳县| 夏邑县| 彭阳县|