中序遍历测试通过

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; }break;
case ORDER_LEFT_IN: 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; }break;
case ORDER_LEFT_POST: case ORDER_LEFT_POST:
{ {
@ -1576,7 +1599,28 @@ void* tree_next(struct _tree* self)
}break; }break;
case ORDER_LEFT_IN: 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; }break;
case ORDER_LEFT_POST: case ORDER_LEFT_POST:
{ {
@ -1619,7 +1663,7 @@ void* tree_end(struct _tree* self)
}break; }break;
case ORDER_LEFT_IN: case ORDER_LEFT_IN:
{ {
return NULL;
}break; }break;
case ORDER_LEFT_POST: case ORDER_LEFT_POST:
{ {

View File

@ -544,15 +544,10 @@ static void test_tree_iter(void)
} }
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array_orderpre_insert[i], buff, count); 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");
// set order for(i = 1; i < 2; i++)
tree->set_order(tree, ORDER_LEFT_PRE); {
// tree->set_order(tree, ORDER_LEFT_IN); tree->set_order(tree, i); //ORDER_LEFT_IN
printf("\n ----- iter test -----\n"); printf("\n ----- iter test -----\n");
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree)) for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
{ {
@ -561,6 +556,25 @@ static void test_tree_iter(void)
} }
printf("\n"); printf("\n");
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array[1], buff, count); 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);
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[2], buff, count);
TEST_ASSERT_FALSE(tree->empty(tree)); TEST_ASSERT_FALSE(tree->empty(tree));
TEST_ASSERT_TRUE(tree->clear(tree)); TEST_ASSERT_TRUE(tree->clear(tree));