From bfc6e88bb9291752c3a0a9982e45346ebd5291ca Mon Sep 17 00:00:00 2001 From: jf-home Date: Mon, 2 Sep 2024 02:15:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E5=AD=98=E6=BA=A2=E5=87=BA=E7=9C=9F?= =?UTF-8?q?=E7=9A=84=E5=BE=88=E5=8F=AF=E6=80=95=EF=BC=8C10=E7=A7=92?= =?UTF-8?q?=E5=B7=A6=E5=8F=B3=E7=9B=B4=E6=8E=A5=E7=BB=99=E6=88=91=E7=94=B5?= =?UTF-8?q?=E8=84=91=E5=8D=A1=E5=B4=A9=E4=BA=86=E3=80=8216G=E5=86=85?= =?UTF-8?q?=E5=AD=98=EF=BC=8C=E4=BB=A5=E8=82=89=E7=9C=BC=E5=8F=AF=E8=A7=81?= =?UTF-8?q?=E7=9A=84=E9=80=9F=E7=8E=87=E7=9B=B4=E5=86=B2100%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tree.c | 28 +++++++++------------------- test/test_tree.c | 7 ++++--- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/tree.c b/src/tree.c index 6544a0c..b0eabc5 100644 --- a/src/tree.c +++ b/src/tree.c @@ -1483,22 +1483,12 @@ void* tree_begin(struct _tree* self) case ORDER_LEFT_PRE: { struct _tree_node* node = NULL; - self->cur_node = self->_root; - if(!self->stack->empty(self->stack) || self->cur_node != NULL) - { - if(self->cur_node != NULL) - { - node = self->cur_node; - self->stack->push(self->stack, &self->cur_node); - } - else - { - self->stack->pop(self->stack, &self->cur_node); - self->cur_node = self->cur_node->right; - } - } - return node; + + self->stack->clear(self->stack); + node = self->cur_node; + self->stack->push(self->stack, &self->cur_node); + return node->obj; }break; case ORDER_LEFT_IN: { @@ -1542,7 +1532,7 @@ void* tree_next(struct _tree* self) case ORDER_LEFT_PRE: { struct _tree_node* node = NULL; - if(!self->stack->empty(self->stack) || self->cur_node != NULL) + while(!self->stack->empty(self->stack) || self->cur_node != NULL) { if(self->cur_node != NULL) { @@ -1555,7 +1545,7 @@ void* tree_next(struct _tree* self) self->cur_node = self->cur_node->right; } } - return node; + return node->obj; }break; case ORDER_LEFT_IN: { @@ -1598,8 +1588,7 @@ void* tree_end(struct _tree* self) { case ORDER_LEFT_PRE: { - struct _tree_node* node = NULL; - return node; + return NULL; }break; case ORDER_LEFT_IN: { @@ -1647,6 +1636,7 @@ bool tree_avl_init(struct _tree *self, uint32_t obj_size) // self->_ratio = 2; self->_right_priority = false; + self->_order = ORDER_PRE; self->insert = tree_avl_insert; self->delete = tree_avl_delete; diff --git a/test/test_tree.c b/test/test_tree.c index 217a292..2bbceb2 100644 --- a/test/test_tree.c +++ b/test/test_tree.c @@ -467,10 +467,10 @@ void test_rbtree_struct(void) static void test_tree_iter(void) { uint32_t i = 0; - // int data[] = { 2,1,3,4}; + int data[] = { 2,1,3,4}; // int data[] = { 1,2,3,4,5,6}; // int data[] = { 5,2,3,1,7,8,6 }; - int data[] = { 5,2,3,1,7,8,6,4,9,10,12,11,15,14,13 }; + // int data[] = { 5,2,3,1,7,8,6,4,9,10,12,11,15,14,13 }; int buff[32]; int count = 0; int temp = 0; @@ -493,10 +493,11 @@ static void test_tree_iter(void) // printf("\n"); } + printf("\niter test\n"); int * iter = NULL; for(iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree)) { - printf("%d ", *iter); + printf("%d \n", *iter); buff[count++] = *iter; }