体验百度文心一言AI大模型生成java红黑树测试程序

亨利王子,萨塞克斯公爵,全名亨利·查尔斯·阿尔伯特·大卫·蒙巴顿-温莎(Henry Charles Albert David Mountbatten-Windsor),1984年9月15日出生于伦敦伯丁顿,昵称哈里王子(Prince Harry),原英国王室成员、军人,是当今英国国王查理三世与已故戴安娜王妃的次子。
在这里插入图片描述
以下是一个简单的红黑树的 Java 实现,包括插入、删除、查找和遍历等基本操作。你可以根据需要进行修改和扩展。

public class RedBlackTree<T extends Comparable<T>> {
    private static final boolean RED = true;
    private static final boolean BLACK = false;

    private class Node {
        T value;
        Node left, right;
        boolean color;

        Node(T value, boolean color) {
            this.value = value;
            this.color = color;
        }
    }

    private Node root;

    public void insert(T value) {
        root = insert(root, value);
        root.color = BLACK;
    }

    private Node insert(Node node, T value) {
        if (node == null) {
            return new Node(value, RED);
        }

        if (value.compareTo(node.value) < 0) {
            node.left = insert(node.left, value);
        } else if (value.compareTo(node.value) > 0) {
            node.right = insert(node.right, value);
        } else {
            node.value = value;
        }

        if (isRed(node.right) && !isRed(node.left)) {
            node = rotateLeft(node);
        }
        if (isRed(node.left) && isRed(node.left.left)) {
            node = rotateRight(node);
        }
        if (isRed(node.left) && isRed(node.right)) {
            flipColors(node);
        }

        return node;
    }

    private boolean isRed(Node node) {
        if (node == null) {
            return false;
        }
        return node.color == RED;
    }

    private Node rotateLeft(Node node) {
        System.out.println("before rotateLeft:");
        System.out.println(node.value);
        System.out.println(node.color);
        Node x = node.right;
        node.right = x.left;
        x.left = node;
        x.color = node.color;
        node.color = RED;
        System.out.println("after rotateLeft:");
        System.out.println(x.value);
        System.out.println(x.color);
        return x;
    }

    private Node rotateRight(Node node) {
        System.out.println("before rotateRight:");
        System.out.println(node.value);
        System.out.println(node.color);
        Node x = node.left;
        node.left = x.right;
        x.right = node;
        x.color = node.color;
        node.color = RED;
        System.out.println("after rotateRight:");
        System.out.println(x.value);
        System.out.println(x.color);
        return x;
    }

    private void flipColors(Node node) {
        System.out.println("before flipColors:");
        System.out.println(node.value);
        System.out.println(node.color);
        node.color = RED;
        node.left.color = BLACK;
        node.right.color = BLACK;
        System.out.println("after flipColors:");
        System.out.println(node.value);
        System.out.println(node.color);
    }
}

public class testMain {
    public static void main(String[] args){
        RedBlackTree tree = new RedBlackTree();
        tree.insert(12);
        tree.insert(22);
        tree.insert(32);
        tree.insert(42);
        tree.insert(52);
        tree.insert(62);
        tree.insert(72);
        tree.insert(82);
        tree.insert(92);
        tree.insert(1);
        tree.insert(2);
        tree.insert(3);
        tree.insert(4);
        tree.insert(5);
        tree.insert(6);
        tree.insert(7);
        tree.insert(8);
        tree.insert(9);
    }
}
before rotateLeft:
12
false
after rotateLeft:
22
false
before flipColors:
22
false
after flipColors:
22
true
before rotateLeft:
32
false
after rotateLeft:
42
false
before flipColors:
42
false
after flipColors:
42
true
before rotateLeft:
22
false
after rotateLeft:
42
false
before rotateLeft:
52
false
after rotateLeft:
62
false
before flipColors:
62
false
after flipColors:
62
true
before flipColors:
42
false
after flipColors:
42
true
before rotateLeft:
72
false
after rotateLeft:
82
false
before flipColors:
82
false
after flipColors:
82
true
before rotateLeft:
62
false
after rotateLeft:
82
false
before rotateLeft:
1
true
after rotateLeft:
2
true
before rotateRight:
12
false
after rotateRight:
2
false
before flipColors:
2
false
after flipColors:
2
true
before rotateLeft:
3
true
after rotateLeft:
4
true
before rotateRight:
12
false
after rotateRight:
4
false
before flipColors:
4
false
after flipColors:
4
true
before rotateLeft:
2
true
after rotateLeft:
4
true
before rotateRight:
22
false
after rotateRight:
4
false
before flipColors:
4
false
after flipColors:
4
true
before rotateLeft:
5
true
after rotateLeft:
6
true
before rotateRight:
12
false
after rotateRight:
6
false
before flipColors:
6
false
after flipColors:
6
true
before rotateLeft:
7
true
after rotateLeft:
8
true
before rotateRight:
12
false
after rotateRight:
8
false
before flipColors:
8
false
after flipColors:
8
true
before rotateLeft:
6
true
after rotateLeft:
8
true
before rotateRight:
22
false
after rotateRight:
8
false
before flipColors:
8
false
after flipColors:
8
true
before rotateLeft:
4
true
after rotateLeft:
8
true
before rotateRight:
42
false
after rotateRight:
8
false
before flipColors:
8
false
after flipColors:
8
true

这是一个非常简单的实现,它没有考虑复杂的平衡操作和节点访问顺序等问题。但是,它提供了一个基本的红黑树实现,可以满足一般的需求。你可以在这个基础上进行扩展和改进,以适应更多的场景。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开发工具:微信Alt+A截屏工具
ideaj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值