From 20c1b811212890f33bc915279b0d4abbe9fe76ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=BB=E9=AD=82=E5=9C=A3=E4=BD=BF?= Date: Fri, 6 Sep 2024 20:12:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BA=A2=E9=BB=91=E6=A0=91?= =?UTF-8?q?=E5=86=85=E9=83=A8=E7=9A=84=E4=B8=80=E4=B8=AA=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=E8=8A=82=E7=82=B9=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/RedBlackTree.h | 4 ++-- main.cpp | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/include/RedBlackTree.h b/include/RedBlackTree.h index 5ac481b..739ea49 100644 --- a/include/RedBlackTree.h +++ b/include/RedBlackTree.h @@ -101,7 +101,7 @@ namespace ling { * lx rx rx ry * */ - void rightRotate(Node *root, Node *y); + void rightRotate(Node *&root, Node *y); /// 查找元素 Node *iterativeSearch(Node *x, T key) const; @@ -438,7 +438,7 @@ namespace ling { } template - void RedBlackTree::rightRotate(RedBlackTree::Node *root, RedBlackTree::Node *y) { + void RedBlackTree::rightRotate(RedBlackTree::Node *&root, RedBlackTree::Node *y) { // 设置x是当前节点的左孩子。 Node *x = y->left; diff --git a/main.cpp b/main.cpp index 72cd8ab..5b40df2 100644 --- a/main.cpp +++ b/main.cpp @@ -7,9 +7,9 @@ #include #include -class RedBlackTree : public ling::RedBlackTree { +class RedBlackTree : public ling::RedBlackTree { protected: - [[nodiscard]] ling::Relation equal(const int &val1, const int &val2) const override { + [[nodiscard]] ling::Relation equal(const unsigned long long &val1, const unsigned long long &val2) const override { if (val1 == val2) return ling::Relation::EQUAL; if (val1 < val2) @@ -96,6 +96,38 @@ TEST(排序, 堆排序测试) { } } +TEST(红黑树, 插入测试2) { + std::random_device rd; + std::mt19937_64 gen(rd()); + std::uniform_int_distribution dist(0x70000000, 0x7ffffffffff); + RedBlackTree tree; + for (int i = 0; i < 3000000; i++) { + tree.insert(dist(gen)); + } + ASSERT_TRUE(tree.getSize() == 3000000); +} + +TEST(红黑树, 插入测试) { + RedBlackTree tree; + std::vector vec; + /*for (int i = 0; i < 3000; i++) { + vec.push_back(dist(gen)); + }*/ + vec.push_back(0x2e27b3d26bc); //1 317 + vec.push_back(0x6ff71223ecc); //2 769 + vec.push_back(0x2d69a2c3138); //3 312 + vec.push_back(0x2de3d825c0); //4 197 + vec.push_back(0x1ecd65c2c5); //5 132 + vec.push_back(0x77561e1ec5e); //6 820 + vec.push_back(0xeb31b2ddab); //7 101 + vec.push_back(0x98b4038275); //8 655 + vec.push_back(0x16243d02489); //9 152 + for (unsigned long i: vec) { + tree.insert(i); + } + ASSERT_TRUE(tree.getSize() == vec.size()); +} + TEST(红黑树, 搜索测试) { RedBlackTree tree; tree.insert(5);