中序遍历测试通过

This commit is contained in:
建峰 2024-09-02 10:36:56 +08:00
parent 1bf06756b7
commit 36707a4b72
2 changed files with 68 additions and 10 deletions

View File

@ -1511,7 +1511,30 @@ void* tree_begin(struct _tree* self)
}break;
case ORDER_LEFT_IN:
{
struct _tree_node* node = NULL;
self->cur_node = self->_root;
while(!self->stack->empty(self->stack) || self->cur_node != NULL)
{
if(self->cur_node != NULL)
{
self->stack->push(self->stack, &self->cur_node);
self->cur_node = self->cur_node->left;
}
else
{
self->stack->pop(self->stack, &self->cur_node);
// self->print_obj(self->cur_node->obj);
node = self->cur_node;
self->cur_node = self->cur_node->right;
break;
}
}
if(node == NULL)
{
return NULL;
}
return node->obj;
}break;
case ORDER_LEFT_POST:
{
@ -1576,7 +1599,28 @@ void* tree_next(struct _tree* self)
}break;
case ORDER_LEFT_IN:
{
struct _tree_node* node = NULL;
while(!self->stack->empty(self->stack) || self->cur_node != NULL)
{
if(self->cur_node != NULL)
{
self->stack->push(self->stack, &self->cur_node);
self->cur_node = self->cur_node->left;
}
else
{
self->stack->pop(self->stack, &self->cur_node);
// self->print_obj(self->cur_node->obj);
node = self->cur_node;
self->cur_node = self->cur_node->right;
break;
}
}
if(node == NULL)
{
return NULL;
}
return node->obj;
}break;
case ORDER_LEFT_POST:
{
@ -1619,7 +1663,7 @@ void* tree_end(struct _tree* self)
}break;
case ORDER_LEFT_IN:
{
return NULL;
}break;
case ORDER_LEFT_POST:
{

View File

@ -544,15 +544,29 @@ static void test_tree_iter(void)
}
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array_orderpre_insert[i], buff, count);
}
// printf("insert = ");
// tree->print_obj(&temp);
// printf("size = %2d : \n", tree->size(tree));
// tree->preorder(tree, tree->_root);
// printf("\n");
for(i = 1; i < 2; i++)
{
tree->set_order(tree, i); //ORDER_LEFT_IN
printf("\n ----- iter test -----\n");
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
{
printf("(%2d ) ", *iter);
buff[count++] = *iter;
}
printf("\n");
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array[1], buff, count);
}
printf("insert = ");
tree->print_obj(&temp);
printf("size = %2d : \n", tree->size(tree));
tree->inorder(tree, tree->_root);
printf("\n");
// set order
tree->set_order(tree, ORDER_LEFT_PRE);
// tree->set_order(tree, ORDER_LEFT_IN);
// tree->set_order(tree, ORDER_LEFT_PRE);
tree->set_order(tree, ORDER_LEFT_IN);
printf("\n ----- iter test -----\n");
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
{
@ -560,7 +574,7 @@ static void test_tree_iter(void)
buff[count++] = *iter;
}
printf("\n");
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array[1], buff, count);
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array[2], buff, count);
TEST_ASSERT_FALSE(tree->empty(tree));
TEST_ASSERT_TRUE(tree->clear(tree));