diff --git a/mk.bat b/mk.bat index 367c0f1..a0b52b7 100644 --- a/mk.bat +++ b/mk.bat @@ -1,8 +1,8 @@ @REM D:\Lang\cmake-3.27.5-windows-x86_64\bin\cmake.EXE --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=D:\Software\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=D:\Software\mingw64\bin\g++.exe -SF:/OpenDemo/1_vsc_cmake -Bf:/OpenDemo/1_vsc_cmake/build -G "MinGW Makefiles" @REM cmake -Bbuild -G "Visual Studio 17 2022" -@REM cmake -B build -G "MinGW Makefiles" -cmake -B build -G "Unix Makefiles" +cmake -B build -G "MinGW Makefiles" +@REM cmake -B build -G "Unix Makefiles" make -C build make -C build install diff --git a/src/tree.c b/src/tree.c index ec04664..55f1ac4 100644 --- a/src/tree.c +++ b/src/tree.c @@ -1541,7 +1541,8 @@ static bool tree_avl_rebalance(struct _tree* self, struct _tree_node* root) { return true; } - self->print_obj(root->obj); + + // self->print_obj(root->obj); tree_set_balance(self, root); int balance = root->balance; if(balance == 2) @@ -1778,12 +1779,16 @@ static bool tree_avl_delete_double_child(struct _tree* self, struct _tree_node* assert(self != NULL); assert(node != NULL); struct _tree_node* tmp = self->find_min(self, node->right); - if(tmp == NULL) + if(tmp != NULL) { - return false; + memmove(node->obj, tmp->obj, self->_obj_size); + if(tmp->right != NULL) + { + node->right = tmp->right; + tmp->right->parent = node; + } + tree_avl_delete_single_child(self, tmp); } - memmove(node->obj, tmp->obj, self->_obj_size); - tree_avl_delete_single_child(self, tmp); return true; } @@ -1803,6 +1808,8 @@ bool tree_avl_delete(struct _tree* self, void* obj) { return false; } + // debug + self->print_obj(obj); if(node->left != NULL && node->right != NULL) { diff --git a/test/test_tree.c b/test/test_tree.c index 5af58ce..1fb081b 100644 --- a/test/test_tree.c +++ b/test/test_tree.c @@ -298,9 +298,9 @@ void test_tree_num(void) { tree->insert(tree, &data[i]); - printf("----- preorder -----\n"); - tree->preorder(tree, tree->_root); - printf("\n"); + // printf("----- preorder -----\n"); + // tree->preorder(tree, tree->_root); + // printf("\n"); } printf("----- preorder -----\n"); tree->preorder(tree, tree->_root); @@ -355,10 +355,10 @@ void test_tree_num(void) tree->delete(tree, &temp); - printf("----- breadth -----\n"); - tree->breadth(tree, tree->_root); - printf("----- inorder -----\n"); - tree->inorder(tree, tree->_root); + // printf("----- breadth -----\n"); + // tree->breadth(tree, tree->_root); + printf("----- preorder -----\n"); + tree->preorder(tree, tree->_root); printf("\n"); }