mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 23:56:54 +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->queue->clear(self->queue);
|
||||||
|
|
||||||
self->_order = order;
|
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;
|
return iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1936,6 +2004,7 @@ const void* tree_iter_next(struct _iterator* iter)
|
|||||||
// // iter->_cur_node = node->next;
|
// // iter->_cur_node = node->next;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
self->_iter._cur += 1;
|
||||||
switch (self->_order)
|
switch (self->_order)
|
||||||
{
|
{
|
||||||
case ORDER_LEFT_PRE:
|
case ORDER_LEFT_PRE:
|
||||||
@ -2092,8 +2161,6 @@ const void* tree_iter_next(struct _iterator* iter)
|
|||||||
{
|
{
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->_iter._cur += 1;
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -926,12 +926,71 @@ static void test_avltree_iter_2(void)
|
|||||||
TEST_ASSERT_TRUE(tree->insert(tree, &temp));
|
TEST_ASSERT_TRUE(tree->insert(tree, &temp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
iterator_t iter = tree->iter(tree, ORDER_LEFT_PRE);
|
iterator_t iter = tree->iter(tree, ORDER_LEFT_PRE);
|
||||||
while(iter->hasnext(iter))
|
while(iter->hasnext(iter))
|
||||||
{
|
{
|
||||||
temp = *(int *)iter->next(iter);
|
temp = *(int *)iter->next(iter);
|
||||||
tree->print_obj(&temp);
|
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));
|
TEST_ASSERT_TRUE(tree->clear(tree));
|
||||||
tree_free(&tree);
|
tree_free(&tree);
|
||||||
|
Loading…
Reference in New Issue
Block a user