C# AVL树(平衡二叉树)的实现
- 平衡二叉树的节点类
/// <summary>
/// 平衡二叉树的节点
/// </summary>
public class AVLNode
{
public int data; //数据
public int bF; //平衡因子
public AVLNode lC; //左孩子
public AVLNode rC; //右孩子
public AVLNode parent; //父节点
public AVLNode(int data)
{
this.data = data;
}
}
- 平衡二叉树类
/// <summary>
/// 平衡二叉树
/// </summary>
class AVLTree
{
private AVLNode root; //根节点
private int count;
public int Count {
get => count; private set => count = value; }
/// <summary>
/// AVL树的插入方法
/// </summary>
/// <param name="data"></param>
public void Insert(int data)
{
#region 找到插入点
if (root == null) //若根节点为空, 则将新节点插入到根节点处
{
root = new AVLNode(data);
return;
}
AVLNode parent = root; //表示当前节点的父节点
AVLNode curNode = root; //表示当前节点
while (curNode != null)
{
parent = curNode;
if (data < parent.data) //若data小于当前节点, 则当前节点为当前节点的左孩子
{
curNode = parent.lC;
}
else
{
curNode = parent.rC;
}
}
//此时已找到空节点
curNode = new AVLNode(data);
curNode.parent = parent;
if (data < parent.data)
{
parent.lC = curNode;
}
else
{
parent.rC = curNode;
}
#endregion
//每插入一个节点便要计算平衡因子
//平衡因子为左子树高度减去右子树高度
while (parent != null)
{
if (parent.lC == curNode) //若新节点在parent的左节点上, 则平衡因子+1
{
parent.bF++;
}
else <