平衡二叉树的增加修改删除以及树的自旋
平衡二叉树
AVL树:所有节点的左子树的高度差不超过1的二叉树。查询效率非常高。
右单旋
1 | // k2 k1 |
(1)将k1的右子树保存在k2的左子树总
(2)将k1的右子树置位k2
左单旋
1 | // k2 k1 |
(1)将k1的左子树保存在k2的右子树中
(2)将k1的左子树置位k2
右左旋
1 | // k2 k2 N |
当造成不平衡的为右子树,并且右子树的左子树比较高:
先以k2的右子树为根节点右旋,再以k2位根节点左旋。
左右旋
1 | // k2 k2 N |
当造成不平衡的为左子树,并且左子树的右子树比较高:
先以k2的左子树为根节点左旋,再以k2位根节点右旋。
平衡二叉树的类的定义与实现
平衡二叉树类的定义
1 | class AVLTree { |
平衡二叉树的插入
1 | //函数名:Insert |
平衡二叉树的深度
1 | //函数名:GetHeight |
平衡二叉树的删除
1 | //平衡二叉树的删除 |
最大子树与最小子树
1 | //函数名:GetMax |
平衡二叉树的遍历
1 | //前序遍历整棵树 |
平衡二叉树的旋转
1 | //函数名:SingleL |