C# AVL树(平衡二叉树)的实现

本文介绍了如何在C#中实现AVL树,这是一种自平衡的二叉搜索树,确保查找、插入和删除操作的时间复杂度保持在O(log n)。内容包括AVL树的节点类定义、树的构建和平衡操作,以及展示的运行结果。
摘要由CSDN通过智能技术生成

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 <
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值