重学Java设计模式读后感之组合设计模式应用

平衡二叉树

平衡二叉树

平衡二叉树(Balanced Binary Tree): 通常指的是AVL树或红黑树这类自平衡二叉搜索树。这里我将向你展示如何用Java实现一个简单的AVL树,包括插入节点并自动保持平衡的操作。

AVL树简介

AVL树是一种自平衡的二叉搜索树,任何节点的两个子树的高度最大差别为1。这种性质保证了查找、插入和删除操作可以在O(log n)时间内完成。

Java代码实现

下面是一个简单的AVL树的实现,包括节点定义、插入方法以及旋转方法来保持树的平衡:

class Node {
   
    int key, height;
    Node left, right;

    Node(int d) {
   
        key = d;
        height = 1; // 新节点默认高度为1
    }
}

public class AVLTree {
   

    Node root;

    // 获取节点的高度
    int height(Node N) {
   
        if (N == null)
            return 0;
        return N.height;
    }

    // 获取两节点的高度差
    int getBalanceFactor(Node N) {
   
        if (N == null)
            return 0;
        return height(N.left) - height(N.right);
    }

    // 右旋
    Node rotateRight(Node y) {
   
        Node x = y.left;
        Node T2 = x.right;

        // 执行旋转
        x.right = y;
        y.left = T2;

        // 更新高度
        y.height = Math.max(height(y.left), height(y.right)) + 1;
        x.height = Math.max(height(x.left), height(x.right)) + 1;

        // 返回新的根节点
        return x;
    }

    // 左旋
    Node rotateLeft(Node x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值