Update binary search tree

This commit is contained in:
2024-07-16 15:08:10 +08:00
parent 4321573b29
commit 240c44c5d7
2 changed files with 263 additions and 7 deletions

View File

@@ -68,5 +68,96 @@ TEST(BinaryTreeTest, BinarySearchTree1) {
});
GTEST_ASSERT_EQ(keys, "20,33,40,77,100,120");
GTEST_ASSERT_EQ(values, "45,23,13,33,20,222");
int v;
GTEST_ASSERT_EQ(binary_search_tree_get(tree, 100, v), true);
GTEST_ASSERT_EQ(v, 20);
GTEST_ASSERT_EQ(binary_search_tree_get(tree, 33, v), true);
GTEST_ASSERT_EQ(v, 23);
GTEST_ASSERT_EQ(binary_search_tree_get(tree, 119, v), false);
GTEST_ASSERT_EQ(v, 23);
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 77, &v), true);
GTEST_ASSERT_EQ(v, 33);
binary_search_tree_insert(tree, 27, 311);
keys = "";
values = "";
binary_search_tree_iter(tree, [&keys, &values](int key, int value) {
if (!keys.empty()) {
keys += ",";
values += ",";
}
keys += std::to_string(key);
values += std::to_string(value);
});
GTEST_ASSERT_EQ(keys, "20,27,33,40,100,120");
GTEST_ASSERT_EQ(values, "45,311,23,13,20,222");
binary_search_tree_insert(tree, 80, 122);
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 33, &v), true);
GTEST_ASSERT_EQ(v, 23);
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 40, &v), true);
GTEST_ASSERT_EQ(v, 13);
keys = "";
values = "";
binary_search_tree_iter(tree, [&keys, &values](int key, int value) {
if (!keys.empty()) {
keys += ",";
values += ",";
}
keys += std::to_string(key);
values += std::to_string(value);
});
GTEST_ASSERT_EQ(keys, "20,27,80,100,120");
GTEST_ASSERT_EQ(values, "45,311,122,20,222");
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 120), true);
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 120, &v), false);
GTEST_ASSERT_EQ(v, 13);
auto j = binary_search_tree_get_node(tree, 20);
GTEST_ASSERT_EQ(j->data.key, 20);
binary_search_tree_clear(tree);
}
TEST(BinaryTreeTest, BinarySearchTree2) {
BinarySearchTree<int, int>* tree = nullptr;
binary_search_tree_insert(tree, 100, 3);
int v;
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 100, &v), true);
GTEST_ASSERT_EQ(v, 3);
GTEST_ASSERT_EQ(tree, nullptr);
binary_search_tree_insert(tree, 2, 3);
binary_search_tree_insert(tree, 1, 2);
binary_search_tree_insert(tree, 3, 4);
GTEST_ASSERT_EQ(binary_search_tree_delete(tree, 2, &v), true);
GTEST_ASSERT_EQ(v, 3);
GTEST_ASSERT_EQ(tree->data.key, 1);
GTEST_ASSERT_EQ(tree->data.value, 2);
binary_search_tree_insert(tree, -100, 123);
binary_search_tree_insert(tree, -200, 200);
binary_search_tree_clear(tree);
}
TEST(BinaryTreeTest, BinarySearchTree3) {
BinarySearchMap<int, int> map;
map.insert(20, 30);
map.insert(30, 40);
map.insert(10, 20);
map[20] = 55;
map[33] = 44;
GTEST_ASSERT_EQ(map[20], 55);
GTEST_ASSERT_EQ(map[33], 44);
int v;
GTEST_ASSERT_EQ(map.get(33, v), true);
GTEST_ASSERT_EQ(v, 44);
GTEST_ASSERT_EQ(map.del(20, &v), true);
GTEST_ASSERT_EQ(v, 55);
std::string keys;
std::string values;
map.iter([&keys, &values](int key, int value) {
if (!keys.empty()) {
keys += ",";
values += ",";
}
keys += std::to_string(key);
values += std::to_string(value);
});
GTEST_ASSERT_EQ(keys, "10,30,33");
GTEST_ASSERT_EQ(values, "20,40,44");
}