多说无益! 直接看图
注意 : 在LR 和 RL的 两种情况中 紫色的三角形 高度 其实比 淡蓝色的 三角形 高度 高了1层 (需要想想)
后文 会给出 Java 的代码实现
代码实现
package structure.AVLTree;
public class AVLTreeAsAdd {
private TreeNode root = null; //根节点
public boolean add(int value) {
return add(new TreeNode(value));
}
private boolean add(TreeNode node) {
if (root == null) {
root = node;
return true;
}
TreeNode indexNode = root; //找插入点
TreeNode parentNode = root;
while (indexNode != null) {
parentNode = indexNode; //记录前一个
if (node.value < indexNode.value) {
indexNode = indexNode.leftNode;
} else if (node.value > indexNode.value) {
indexNode = indexNode.rightNode;
} else {
//为了简单方便- -就不插入重复元素了
return false;
}
}
//parentNode 就是插入的地方
node.parentNode = parentNode;
if (node.value > parentNode.value) {
parentNode.rightNode = node;
} else parentNode.leftNode = node;
//调节平衡
while (parentNode != null) {
if (parentNode.value > node.value) {
//左边插入了
parentNode.bf++;
} else parentNode.bf--;