平衡二叉树
平衡二叉树
平衡二叉树(Balanced Binary Tree): 通常指的是AVL树或红黑树这类自平衡二叉搜索树。这里我将向你展示如何用Java实现一个简单的AVL树,包括插入节点并自动保持平衡的操作。
AVL树简介
AVL树是一种自平衡的二叉搜索树,任何节点的两个子树的高度最大差别为1。这种性质保证了查找、插入和删除操作可以在O(log n)时间内完成。
Java代码实现
下面是一个简单的AVL树的实现,包括节点定义、插入方法以及旋转方法来保持树的平衡:
class Node {
int key, height;
Node left, right;
Node(int d) {
key = d;
height = 1; // 新节点默认高度为1
}
}
public class AVLTree {
Node root;
// 获取节点的高度
int height(Node N) {
if (N == null)
return 0;
return N.height;
}
// 获取两节点的高度差
int getBalanceFactor(Node N) {
if (N == null)
return 0;
return height(N.left) - height(N.right);
}
// 右旋
Node rotateRight(Node y) {
Node x = y.left;
Node T2 = x.right;
// 执行旋转
x.right = y;
y.left = T2;
// 更新高度
y.height = Math.max(height(y.left), height(y.right)) + 1;
x.height = Math.max(height(x.left), height(x.right)) + 1;
// 返回新的根节点
return x;
}
// 左旋
Node rotateLeft(Node x