AVL排序是一种自平衡的二叉搜索树排序算法,它的操作过程需要对树的结构进行修改,因此无法满足原地排序的要求。
以下是一个示例实现AVL排序的代码,其中实现了自平衡的操作:
class Node:
def __init__(self,val):
self.val = val
self.left = None
self.right = None
self.height = 1
class AVL:
def getHeight(self,root):
if not root:
return 0
return root.height
def getBalance(self,root):
if not root:
return 0
return self.getHeight(root.left) - self.getHeight(root.right)
def rightRotate(self,a):
b = a.left
c = b.right
b.right = a
a.left = c
a.height = 1 + max(self.getHeight(a.left),self.getHeight(a.right))
b.height = 1 + max(self.getHeight(b.left),self.getHeight(b.right))
return b
def leftRotate(self,a):
b = a.right
c = b.left
b.left = a
a.right = c
a.height = 1 + max(self.getHeight(a.left),self.getHeight(a.right))
b.height = 1 + max(self.getHeight(b.left),self.getHeight(b.right))
return b
def insert(self,root,val):
if not root:
return Node(val)
elif val < root.val:
root.left = self.insert(root.left,val)
else:
root.right = self.insert(root.right,val)
root.height = 1 + max(self.getHeight(root.left),self.getHeight(root.right))
balance = self.getBalance(root)
if balance > 1 and val < root.left.val:
return self.rightRotate(root)
if balance < -1 and val > root.right.val:
return self.leftRotate(root)
if balance > 1 and val > root.left.val:
root.left = self.leftRotate(root.left)
return self.rightRotate(root)
if balance < -1 and val < root.right.val:
root.right = self.rightRotate(root
下一篇:AVL平衡因子旋转