mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
前序遍历用栈实现
This commit is contained in:
parent
00ae16c777
commit
05bfb65d8e
@ -0,0 +1,62 @@
|
||||
|
||||
|
||||
# tree
|
||||
日志
|
||||
```
|
||||
----- unicstl test -----
|
||||
|
||||
|
||||
----- test_tree_num -----
|
||||
----- insert -----
|
||||
insert = ( 5 ) size = 1 : ( 5 )
|
||||
insert = ( 2 ) size = 2 : ( 5 ) ( 2 )
|
||||
insert = ( 3 ) size = 3 : ( 3 ) ( 2 ) ( 5 )
|
||||
insert = ( 1 ) size = 4 : ( 3 ) ( 2 ) ( 1 ) ( 5 )
|
||||
insert = ( 7 ) size = 5 : ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 7 )
|
||||
insert = ( 8 ) size = 6 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 8 )
|
||||
insert = ( 6 ) size = 7 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 6 ) ( 8 )
|
||||
insert = ( 4 ) size = 8 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 8 )
|
||||
insert = ( 9 ) size = 9 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 8 ) ( 9 )
|
||||
insert = (10 ) size = 10 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 )
|
||||
insert = (12 ) size = 11 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) (12 )
|
||||
insert = (11 ) size = 12 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (11 ) (10 ) (12 )
|
||||
insert = (15 ) size = 13 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (12 ) (15 )
|
||||
insert = (14 ) size = 14 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (15 )
|
||||
insert = (13 ) size = 15 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
----- preorder -----
|
||||
( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
----- inorder -----
|
||||
( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) ( 7 ) ( 8 ) ( 9 ) (10 ) (11 ) (12 ) (13 ) (14 ) (15 )
|
||||
----- postorder -----
|
||||
( 1 ) ( 2 ) ( 4 ) ( 6 ) ( 5 ) ( 3 ) ( 8 ) (10 ) ( 9 ) (13 ) (12 ) (15 ) (14 ) (11 ) ( 7 )
|
||||
----- breadth -----
|
||||
( 7 ) ( 3 ) (11 ) ( 2 ) ( 5 ) ( 9 ) (14 ) ( 1 ) ( 4 ) ( 6 ) ( 8 ) (10 ) (12 ) (15 ) (13 )
|
||||
----- right priority -----
|
||||
----- preorder(right) -----
|
||||
( 7 ) (11 ) (14 ) (15 ) (12 ) (13 ) ( 9 ) (10 ) ( 8 ) ( 3 ) ( 5 ) ( 6 ) ( 4 ) ( 2 ) ( 1 )
|
||||
----- inorder(right) -----
|
||||
(15 ) (14 ) (13 ) (12 ) (11 ) (10 ) ( 9 ) ( 8 ) ( 7 ) ( 6 ) ( 5 ) ( 4 ) ( 3 ) ( 2 ) ( 1 )
|
||||
----- postorder(right) -----
|
||||
(15 ) (13 ) (12 ) (14 ) (10 ) ( 8 ) ( 9 ) (11 ) ( 6 ) ( 4 ) ( 5 ) ( 1 ) ( 2 ) ( 3 ) ( 7 )
|
||||
----- breadth(right) -----
|
||||
( 7 ) (11 ) ( 3 ) (14 ) ( 9 ) ( 5 ) ( 2 ) (15 ) (12 ) (10 ) ( 8 ) ( 6 ) ( 4 ) ( 1 ) (13 )
|
||||
----- left priority -----
|
||||
----- preorder -----
|
||||
( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 5 ) size = 14 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 6 ) ( 4 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 2 ) size = 13 : ( 7 ) ( 3 ) ( 1 ) ( 6 ) ( 4 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 3 ) size = 12 : ( 7 ) ( 4 ) ( 1 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 1 ) size = 11 : (11 ) ( 7 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 7 ) size = 10 : (11 ) ( 8 ) ( 4 ) ( 6 ) ( 9 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 8 ) size = 9 : (11 ) ( 9 ) ( 4 ) ( 6 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 6 ) size = 8 : (11 ) ( 9 ) ( 4 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 4 ) size = 7 : (11 ) ( 9 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 9 ) size = 6 : (12 ) (11 ) (10 ) (14 ) (13 ) (15 )
|
||||
delete = (10 ) size = 5 : (12 ) (11 ) (14 ) (13 ) (15 )
|
||||
delete = (12 ) size = 4 : (13 ) (11 ) (14 ) (15 )
|
||||
delete = (11 ) size = 3 : (14 ) (13 ) (15 )
|
||||
delete = (15 ) size = 2 : (14 ) (13 )
|
||||
delete = (14 ) size = 1 : (13 )
|
||||
delete = (13 ) size = 0 :
|
||||
----- empty -----
|
||||
```
|
43
src/tree.c
43
src/tree.c
@ -10,6 +10,7 @@
|
||||
*/
|
||||
#include "tree.h"
|
||||
#include "queue.h"
|
||||
#include "stack.h"
|
||||
|
||||
#if RAVLTREE == 1
|
||||
// function declare
|
||||
@ -1947,6 +1948,7 @@ void tree_order(struct _tree* self, bool right_priority)
|
||||
|
||||
void tree_avl_preorder(struct _tree* self, struct _tree_node* root)
|
||||
{
|
||||
#if 0
|
||||
assert(self != NULL);
|
||||
if(root == NULL)
|
||||
{
|
||||
@ -1977,6 +1979,47 @@ void tree_avl_preorder(struct _tree* self, struct _tree_node* root)
|
||||
tree_avl_preorder(self, root->left);
|
||||
}
|
||||
}
|
||||
#else
|
||||
assert(self != NULL);
|
||||
if(root == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
struct _tree_node* node = NULL;
|
||||
|
||||
stack_t stack = stack_new();
|
||||
stack_init(stack, sizeof(struct _tree_node*));
|
||||
stack->push(stack, &root);
|
||||
while(!stack->empty(stack))
|
||||
{
|
||||
stack->pop(stack, &node);
|
||||
if(!self->_right_priority) // left priority
|
||||
{
|
||||
self->print_obj(node->obj);
|
||||
if(node->right != NULL)
|
||||
{
|
||||
stack->push(stack, &node->right);
|
||||
}
|
||||
if(node->left != NULL)
|
||||
{
|
||||
stack->push(stack, &node->left);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self->print_obj(node->obj);
|
||||
if(node->left != NULL)
|
||||
{
|
||||
stack->push(stack, &node->left);
|
||||
}
|
||||
if(node->right != NULL)
|
||||
{
|
||||
stack->push(stack, &node->right);
|
||||
}
|
||||
}
|
||||
}
|
||||
stack_free(stack);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tree_avl_inorder(struct _tree* self, struct _tree_node* root)
|
||||
|
Loading…
Reference in New Issue
Block a user