返回
掌握 AVL 树旋转,平衡二叉树支棱起来!
前端
2023-12-14 08:50:16
AVL 树旋转,平衡二叉树的支柱
平衡二叉树,顾名思义,是一种左右子树高度差不会超过 1 的二叉查找树。作为平衡二叉树家族中的一员,AVL 树以其独特的旋转操作而著称。旋转操作巧妙地调整树的结构,确保高度平衡。
AVL 树旋转有四种类型:左旋、右旋、左双旋和右双旋。这些旋转操作以特定的方式调整树的节点,从而恢复树的高度平衡。掌握旋转操作是理解和实现 AVL 树的关键。
JavaScript 实现 AVL 树
在 JavaScript 中实现 AVL 树并不困难。以下是如何进行旋转操作:
class AVLNode {
constructor(key, value) {
this.key = key;
this.value = value;
this.left = null;
this.right = null;
this.height = 0;
}
}
class AVLTree {
constructor() {
this.root = null;
}
// 左旋
leftRotate(node) {
const rightChild = node.right;
node.right = rightChild.left;
rightChild.left = node;
node.height = Math.max(this.getHeight(node.left), this.getHeight(node.right)) + 1;
rightChild.height = Math.max(this.getHeight(rightChild.left), this.getHeight(rightChild.right)) + 1;
return rightChild;
}
// 右旋
rightRotate(node) {
const leftChild = node.left;
node.left = leftChild.right;
leftChild.right = node;
node.height = Math.max(this.getHeight(node.left), this.getHeight(node.right)) + 1;
leftChild.height = Math.max(this.getHeight(leftChild.left), this.getHeight(leftChild.right)) + 1;
return leftChild;
}
// 左双旋
leftDoubleRotate(node) {
node.left = this.rightRotate(node.left);
return this.leftRotate(node);
}
// 右双旋
rightDoubleRotate(node) {
node.right = this.leftRotate(node.right);
return this.rightRotate(node);
}
}
结语
AVL 树旋转是平衡二叉树的重要操作。掌握旋转操作可以帮助你理解和实现 AVL 树,进而解决更复杂的平衡问题。如果你想深入了解平衡二叉树的世界,AVL 树旋转是一个必不可少的起点。希望这篇文章能为你提供一个坚实的基础,让你踏上平衡二叉树的探索之旅。