C#与数据结构--树论--平衡二叉树(AVL Tree)
1. 为什么平衡树? 在二叉搜索树(BST,Binary Search Tree)中提到,BST树可能会退化成一个链表( 整棵树中只有左子树,或者只有右子树 ),这将大大影响二叉树的性能。 前苏联科学家G.M. Adelson-Velskii 和 E.M. Landis给出了答案。他们在1962年发表的一篇名为《An algorithm for the organization of information》的文章中提出了一种自平衡二叉查找树( self-balancing binary search tree )。这种二叉查找树在插入和删除操作中,可以通过一系列的旋转操作来保持平衡,从而保证了二叉查找树的查找效率。最终这种二叉查找树以他们的名字命名为“AVL-Tree”,它也被称为平衡二叉树(Balanced Binary Tree)。 2. 原理 在节点上设置一个平衡因子BF,代表左右子树的高度差,BF = { -1, 0, 1}。 3. 旋转 AVL的Insert/Delete操作可能会引起树的失衡,可以通过选择解决这个问题。 3.1 4种旋转 (1)LL (2)RR (3)LR (4)RL 在下面的文章中有一个关于AVL选择的动画,大家不妨看看。 C#与数据结构--树论--平衡二叉树(AVL Tree) 3.2 旋转实现 在算法导论中给出旋转的伪代码: LEFT