From 6054e712e658990042822991a425caa46b377a00 Mon Sep 17 00:00:00 2001 From: wjf-hs Date: Sun, 27 Apr 2025 11:28:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E5=BA=A6=E4=BC=98=E5=85=88=E9=81=8D?= =?UTF-8?q?=E5=8E=86=EF=BC=9A=E5=88=A0=E9=99=A4=E9=9D=9E=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tree.c | 47 ++++++++++++++++------------------------------- 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/src/tree.c b/src/tree.c index 02ca20a..a9c1d63 100644 --- a/src/tree.c +++ b/src/tree.c @@ -31,8 +31,8 @@ static uint32_t tree_height_node(struct _tree* self, struct _tree_node* root) return 0; } uint32_t height = 0; - int32_t count_cur_level = 0; - int32_t count_next_level = 0; + uint32_t count_cur_level = 0; + uint32_t count_next_level = 0; struct _tree_node* node = root; queue_t queue = queue_new(sizeof(struct _tree_node*)); @@ -1370,14 +1370,7 @@ static const void* tree_iter_next(struct _iterator* iter) if (!self->stack->empty(self->stack)) { self->stack->pop(self->stack, &cur_node); - } - else - { - cur_node = NULL; - } - if(cur_node != NULL) - { self->_iter._cur_node = cur_node; obj = cur_node->obj; } @@ -1385,44 +1378,36 @@ static const void* tree_iter_next(struct _iterator* iter) case ORDER_BREADTH: case ORDER_BREADTH_R: { - struct _tree_node* node = cur_node; queue_t queue = self->queue; - if (!queue->empty(queue) && node != NULL) + if (!queue->empty(queue) && cur_node != NULL) { - queue->pop(queue, &node); + queue->pop(queue, &cur_node); + + self->_iter._cur_node = cur_node; + obj = cur_node->obj; + if (self->_order == ORDER_BREADTH) { - if (node->left != NULL) + if (cur_node->left != NULL) { - queue->push(queue, &node->left); + queue->push(queue, &cur_node->left); } - if (node->right != NULL) + if (cur_node->right != NULL) { - queue->push(queue, &node->right); + queue->push(queue, &cur_node->right); } } else { - if (node->right != NULL) + if (cur_node->right != NULL) { - queue->push(queue, &node->right); + queue->push(queue, &cur_node->right); } - if (node->left != NULL) + if (cur_node->left != NULL) { - queue->push(queue, &node->left); + queue->push(queue, &cur_node->left); } } - cur_node = node; - } - else - { - cur_node = NULL; - } - - if(cur_node != NULL) - { - self->_iter._cur_node = cur_node; - obj = cur_node->obj; } }break; default: