(btree)+constructor for structure, cleaned up some code

Might as well use C++ features if I've got them
This commit is contained in:
2023-07-09 16:22:23 +01:00
parent 7df5a3c947
commit 509c8930e8

View File

@@ -18,6 +18,14 @@ struct BinaryTree
T value; T value;
BinaryTree<T> *left, *right; BinaryTree<T> *left, *right;
enum Order (*compare)(T, T); enum Order (*compare)(T, T);
BinaryTree(T val, BinaryTree<T> *l, BinaryTree<T> *r, enum Order (*cmp)(T, T))
{
value = val;
left = l;
right = r;
compare = cmp;
}
~BinaryTree() ~BinaryTree()
{ {
delete left; delete left;
@@ -39,17 +47,8 @@ BinaryTree<T> *insert(BinaryTree<T> *tree, T value)
node = &tree->right; node = &tree->right;
break; break;
} }
*node = *node ? insert(*node, value)
if (*node) : new BinaryTree<T>(value, nullptr, nullptr, tree->compare);
{
*node = insert(*node, value);
return tree;
}
*node = new BinaryTree<T>;
(*node)->value = value;
(*node)->left = nullptr;
(*node)->right = nullptr;
(*node)->compare = tree->compare;
return tree; return tree;
} }
@@ -87,14 +86,9 @@ std::ostream &operator<<(std::ostream &ostream, const BinaryTree<T> *btree)
return ostream; return ostream;
} }
void test()
{}
int main(void) int main(void)
{ {
auto tree = new BinaryTree<int>; auto cmp = [](int x, int y)
tree->value = 5;
tree->compare = [](int x, int y)
{ {
if (x < y) if (x < y)
return LT; return LT;
@@ -103,7 +97,7 @@ int main(void)
else else
return EQ; return EQ;
}; };
auto tree = new BinaryTree<int>(5, NULL, NULL, cmp);
for (int i = 0; i <= 5; ++i) for (int i = 0; i <= 5; ++i)
tree = insert(tree, i * 2); tree = insert(tree, i * 2);