tree删除非必要属性,把order遍历相关的操作都放在iterator中了

This commit is contained in:
建峰 2025-04-27 11:43:57 +08:00
parent d278ef008f
commit 1982a90a3e
2 changed files with 7 additions and 16 deletions

View File

@ -59,9 +59,6 @@ struct _tree
uint32_t _capacity; uint32_t _capacity;
uint32_t _ratio; uint32_t _ratio;
enum _tree_order _order;
bool _right_priority;
stack_t stack; stack_t stack;
queue_t queue; queue_t queue;

View File

@ -1160,11 +1160,11 @@ static iterator_t tree_iter(struct _tree* self, enum _tree_order order)
iter->_cur = 0; iter->_cur = 0;
iter->_cur_node = self->_root; iter->_cur_node = self->_root;
self->_order = order; iter->_order = order;
self->stack->clear(self->stack); self->stack->clear(self->stack);
self->queue->clear(self->queue); self->queue->clear(self->queue);
switch (self->_order) switch (iter->_order)
{ {
case ORDER_PRE: case ORDER_PRE:
case ORDER_PRE_R: case ORDER_PRE_R:
@ -1183,7 +1183,7 @@ static iterator_t tree_iter(struct _tree* self, enum _tree_order order)
self->stack->clear(self->stack); self->stack->clear(self->stack);
stack_t stack = stack_new(sizeof(struct _tree_node*)); stack_t stack = stack_new(sizeof(struct _tree_node*));
if (self->_order == ORDER_POST) if (iter->_order == ORDER_POST)
{ {
while (!stack->empty(stack) || node != NULL) while (!stack->empty(stack) || node != NULL)
{ {
@ -1258,13 +1258,13 @@ static const void* tree_iter_next(struct _iterator* iter)
struct _tree_node* cur_node = self->_iter._cur_node; struct _tree_node* cur_node = self->_iter._cur_node;
struct _tree_node* target_node = NULL; struct _tree_node* target_node = NULL;
switch (self->_order) switch (iter->_order)
{ {
case ORDER_PRE: case ORDER_PRE:
case ORDER_PRE_R: case ORDER_PRE_R:
{ {
struct _tree_node* node = NULL; struct _tree_node* node = NULL;
if (self->_order == ORDER_PRE) if (iter->_order == ORDER_PRE)
{ {
while (!self->stack->empty(self->stack) || cur_node != NULL) while (!self->stack->empty(self->stack) || cur_node != NULL)
{ {
@ -1306,7 +1306,7 @@ static const void* tree_iter_next(struct _iterator* iter)
case ORDER_IN: case ORDER_IN:
case ORDER_IN_R: case ORDER_IN_R:
{ {
if (self->_order == ORDER_IN) if (iter->_order == ORDER_IN)
{ {
while (!self->stack->empty(self->stack) || cur_node != NULL) while (!self->stack->empty(self->stack) || cur_node != NULL)
{ {
@ -1363,7 +1363,7 @@ static const void* tree_iter_next(struct _iterator* iter)
queue->pop(queue, &cur_node); queue->pop(queue, &cur_node);
target_node = cur_node; target_node = cur_node;
if (self->_order == ORDER_BREADTH) if (iter->_order == ORDER_BREADTH)
{ {
if (cur_node->left != NULL) if (cur_node->left != NULL)
{ {
@ -1413,9 +1413,6 @@ static bool tree_avl_init(struct _tree* self, uint32_t obj_size)
// self->_capacity = 64; // self->_capacity = 64;
// self->_ratio = 2; // self->_ratio = 2;
self->_right_priority = false;
self->_order = ORDER_PRE;
self->_root = NULL; self->_root = NULL;
self->stack = stack_new(sizeof(struct _tree_node*)); self->stack = stack_new(sizeof(struct _tree_node*));
@ -1469,9 +1466,6 @@ static bool tree_rb_init(struct _tree* self, uint32_t obj_size)
self->_root = NULL; self->_root = NULL;
self->_right_priority = false;
self->_order = ORDER_PRE;
self->stack = stack_new(sizeof(struct _tree_node*)); self->stack = stack_new(sizeof(struct _tree_node*));
if (self->stack == NULL) if (self->stack == NULL)
{ {