summaryrefslogtreecommitdiff
path: root/src/02/05/btree.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/02/05/btree.c')
-rw-r--r--src/02/05/btree.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/02/05/btree.c b/src/02/05/btree.c
index 23d3fbc..3fd4e31 100644
--- a/src/02/05/btree.c
+++ b/src/02/05/btree.c
@@ -31,12 +31,27 @@ void btree_pre_order_number(BTree *tree) {
//right
}
-void btree_in_order_number(BTree *tree) {
- //use a stack
- //
- // left
- // self
- // right
+void btree_in_order_number(BTree *root) {
+ BTree *original = root;
+ if (root == NULL) return;
+
+ Stack *stack = stack_init();
+ int i = 0;
+
+ while (true) {
+ if (root) {
+ stack_push(stack, root);
+ root = root->left;
+ }
+ else {
+ if (stack_size(stack) == 0)
+ break;
+ root = stack_pop(stack);
+ original->in_order[i] = root->data;
+ ++i;
+ root = root->right;
+ }
+ }
}
void btree_post_order_number(BTree *tree) {