mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
tree深度优先遍历的迭代器都调试通过了
This commit is contained in:
parent
8ffde2b608
commit
5ab918b067
71
src/tree.c
71
src/tree.c
@ -1904,6 +1904,74 @@ iterator_t tree_iter(struct _tree* self, enum _order order)
|
||||
self->queue->clear(self->queue);
|
||||
|
||||
self->_order = order;
|
||||
|
||||
switch (self->_order)
|
||||
{
|
||||
case ORDER_LEFT_PRE:
|
||||
case ORDER_RIGHT_PRE:
|
||||
{
|
||||
// pass
|
||||
}break;
|
||||
case ORDER_LEFT_IN:
|
||||
case ORDER_RIGHT_IN:
|
||||
{
|
||||
// pass
|
||||
}break;
|
||||
case ORDER_LEFT_POST:
|
||||
case ORDER_RIGHT_POST:
|
||||
{
|
||||
struct _tree_node* node = self->_root;
|
||||
self->stack->clear(self->stack);
|
||||
|
||||
stack_t stack = stack_new(sizeof(struct _tree_node*));
|
||||
if (self->_order == ORDER_LEFT_POST)
|
||||
{
|
||||
while (!stack->empty(stack) || node != NULL)
|
||||
{
|
||||
if (node != NULL)
|
||||
{
|
||||
self->stack->push(self->stack, &node);
|
||||
|
||||
stack->push(stack, &node);
|
||||
node = node->right;
|
||||
}
|
||||
else
|
||||
{
|
||||
stack->pop(stack, &node);
|
||||
node = node->left;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (!stack->empty(stack) || node != NULL)
|
||||
{
|
||||
if (node != NULL)
|
||||
{
|
||||
self->stack->push(self->stack, &node);
|
||||
|
||||
stack->push(stack, &node);
|
||||
node = node->left;
|
||||
}
|
||||
else
|
||||
{
|
||||
stack->pop(stack, &node);
|
||||
node = node->right;
|
||||
}
|
||||
}
|
||||
}
|
||||
stack_free(&stack);
|
||||
}break;
|
||||
case ORDER_LEFT_BREADTH:
|
||||
case ORDER_RIGHT_BREADTH:
|
||||
{
|
||||
// pass
|
||||
}break;
|
||||
default:
|
||||
{
|
||||
}break;
|
||||
}
|
||||
|
||||
return iter;
|
||||
}
|
||||
|
||||
@ -1936,6 +2004,7 @@ const void* tree_iter_next(struct _iterator* iter)
|
||||
// // iter->_cur_node = node->next;
|
||||
// }
|
||||
|
||||
self->_iter._cur += 1;
|
||||
switch (self->_order)
|
||||
{
|
||||
case ORDER_LEFT_PRE:
|
||||
@ -2092,8 +2161,6 @@ const void* tree_iter_next(struct _iterator* iter)
|
||||
{
|
||||
}break;
|
||||
}
|
||||
|
||||
self->_iter._cur += 1;
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
@ -926,12 +926,71 @@ static void test_avltree_iter_2(void)
|
||||
TEST_ASSERT_TRUE(tree->insert(tree, &temp));
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
|
||||
iterator_t iter = tree->iter(tree, ORDER_LEFT_PRE);
|
||||
while(iter->hasnext(iter))
|
||||
{
|
||||
temp = *(int *)iter->next(iter);
|
||||
tree->print_obj(&temp);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
iter = tree->iter(tree, ORDER_LEFT_IN);
|
||||
while(iter->hasnext(iter))
|
||||
{
|
||||
temp = *(int *)iter->next(iter);
|
||||
tree->print_obj(&temp);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
iter = tree->iter(tree, ORDER_LEFT_POST);
|
||||
while(iter->hasnext(iter))
|
||||
{
|
||||
temp = *(int *)iter->next(iter);
|
||||
tree->print_obj(&temp);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
// iter = tree->iter(tree, ORDER_LEFT_BREADTH);
|
||||
// while(iter->hasnext(iter))
|
||||
// {
|
||||
// temp = *(int *)iter->next(iter);
|
||||
// tree->print_obj(&temp);
|
||||
// }
|
||||
// printf("\n");
|
||||
|
||||
iter = tree->iter(tree, ORDER_RIGHT_PRE);
|
||||
while(iter->hasnext(iter))
|
||||
{
|
||||
temp = *(int *)iter->next(iter);
|
||||
tree->print_obj(&temp);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
iter = tree->iter(tree, ORDER_RIGHT_IN);
|
||||
while(iter->hasnext(iter))
|
||||
{
|
||||
temp = *(int *)iter->next(iter);
|
||||
tree->print_obj(&temp);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
iter = tree->iter(tree, ORDER_RIGHT_POST);
|
||||
while(iter->hasnext(iter))
|
||||
{
|
||||
temp = *(int *)iter->next(iter);
|
||||
tree->print_obj(&temp);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
// iter = tree->iter(tree, ORDER_RIGHT_BREADTH);
|
||||
// while(iter->hasnext(iter))
|
||||
// {
|
||||
// temp = *(int *)iter->next(iter);
|
||||
// tree->print_obj(&temp);
|
||||
// }
|
||||
// printf("\n");
|
||||
|
||||
TEST_ASSERT_TRUE(tree->clear(tree));
|
||||
tree_free(&tree);
|
||||
|
Loading…
Reference in New Issue
Block a user