diff options
Diffstat (limited to 'src/02/03/btree.c')
| -rw-r--r-- | src/02/03/btree.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/02/03/btree.c b/src/02/03/btree.c index b44e173..8601927 100644 --- a/src/02/03/btree.c +++ b/src/02/03/btree.c @@ -23,13 +23,15 @@ static void inspect(BTree *tree, int level) { } /** - * Initializes the root of a binary tree + * Initializes an new subtree in a binary tree * + * @param parent the parent of the new btree node * @param data the data to assign to the root of the tree. - * @return Returns the root of the tree. + * @return Returns the new subtree */ -BTree *btree_init(int data) { +BTree *btree_initialize(BTree *parent, int data) { BTree *tree = malloc(sizeof(BTree)); + tree->parent = parent; tree->left = NULL; tree->right = NULL; tree->data = data; @@ -66,7 +68,21 @@ List *btree_to_list(BTree *tree) int btree_size(BTree *tree) { List *list = btree_to_list(tree); - return list_size(list); + return list ? list_size(list) : 0; +} + +BTree *btree_rebalance(BTree *tree) +{ + if (!tree->parent) + return tree; + + int size = btree_size(tree); + int parent_size = btree_size(tree->parent); + /*float ratio = size / parent_size;*/ + float ratio = 0.0; + printf("%d / %d = %f\n", size, parent_size, ratio); + + return tree; } /** @@ -77,18 +93,19 @@ int btree_size(BTree *tree) { */ BTree *btree_insert(BTree *tree, int data) { if (!tree) - return btree_init(data); + return btree_initialize(NULL, data); if (data <= tree->data) if (tree->left) btree_insert(tree->left, data); else - tree->left = btree_init(data); + tree->left = btree_initialize(tree, data); else if (tree->right) btree_insert(tree->right, data); else - tree->right = btree_init(data); + tree->right = btree_initialize(tree, data); + /*return btree_rebalance(tree);*/ return tree; } |
