diff --git a/btree.cpp b/btree.cpp index c22c297..0ac794f 100644 --- a/btree.cpp +++ b/btree.cpp @@ -24,3 +24,29 @@ struct BinaryTree } }; +template +BinaryTree *insert(BinaryTree *tree, T value) +{ + BinaryTree **node = &tree; + switch (tree->compare(value, tree->value)) + { + case LT: + node = &tree->left; + break; + case EQ: + case GT: + node = &tree->right; + break; + } + + if (*node) { + *node = insert(*node, value); + return tree; + } + *node = new BinaryTree; + (*node)->value = value; + (*node)->left = (*node)->right = nullptr; + (*node)->compare = tree->compare; + return tree; +} +