二叉树之下

平衡二叉搜索树 & AVL 树 学习笔记

2018-03-08  本文已影响29人  专职跑龙套

平衡二叉树

平衡二叉树(Balanced Binary Tree),其每个结点的左子树和右子树的高度最多差 1,严格定义是:

当然,二叉排序树(Binary Search Tree)有的性质它都有:

例如:


AVL树
非AVL二叉树

平衡二叉树优缺点

平衡二叉树的优点:

平衡二叉树的缺点:

AVL 树

AVL 树是最早的平衡二叉树实现之一。

平衡二叉树或者说 AVL 树的查找基本与二叉查找树相同。

在每一次插入数值之后,树的平衡性都可能被破坏,这时可以通过一个简单的操作来矫正平衡–旋转
旋转的目的就是减少高度,通过降低整棵树的高度来平衡。哪边的树高,就把那边的树向上旋转。

插入节点时分四种情况,四种情况对应的旋转方法是不同的:

LL 右旋转

LL(在a的左子树根节点的左子树上插入节点而破坏平衡):右旋转

如下图所示:
由于插入的新的节点 3,所以导致树的平衡性被破坏。因此需要对 7->5->3 这个子树进行右旋转。

LL 右旋转

那如果节点 5 本来就有了右子树呢?照样右旋转,只要把原来 5 的右子树 6 变成旋转后的 7 的左子树就行了。因为 5 的右子树 6 肯定比 5 大,但是也肯定比 7 小的:


image

RR 左旋转

RR(在a的右子树根节点的右子树上插入节点而破坏平衡):左旋转

如下图所示:
由于插入的新的节点 15,所以导致树的平衡性被破坏。因此需要对 10->13->15 这个子树进行左旋转。

RR 左旋转

LR 先左旋再右旋

LR(在a的左子树根节点的右子树上插入节点而破坏平衡):先左旋后右旋

如下图所示:
由于插入的新的节点 6,所以导致树的平衡性被破坏。因此需要对 7->5->6 这个子树进行先左旋后右旋。

LR 先左旋再右旋

RL 先右旋再左旋

RL(在a的右子树根节点的左子树上插入节点而破坏平衡):先右旋后左旋

如下图所示:
由于插入的新的节点 11,所以导致树的平衡性被破坏。因此需要对 10->13->11 这个子树进行先右旋再左旋。

RL 先右旋再左旋

引用:
平衡二叉树
算法导论-透彻了解平衡二叉树(AVL树)
AVL树的旋转图解和简单实现

上一篇 下一篇

猜你喜欢

热点阅读