From 36938b584ea2d096d97a124b70da51f685850ff7 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Sun, 11 Jan 2026 21:13:29 +0000 Subject: A few examples, some more will be added soon. --- examples/data_structures/binary_tree.zc | 91 +++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 examples/data_structures/binary_tree.zc (limited to 'examples/data_structures/binary_tree.zc') diff --git a/examples/data_structures/binary_tree.zc b/examples/data_structures/binary_tree.zc new file mode 100644 index 0000000..14e7b3d --- /dev/null +++ b/examples/data_structures/binary_tree.zc @@ -0,0 +1,91 @@ +import "std.zc" + +struct Node { + value: int; + left: Node*; + right: Node*; +} + +impl Node { + fn new(v: int) -> Self* { + var n = alloc(); + n.value = v; + n.left = NULL; + n.right = NULL; + return n; + } +} + +struct BST { + root: Node*; +} + +impl BST { + fn new() -> Self { + return Self { root: NULL }; + } + + fn _insert(node: Node*, v: int) -> Node* { + guard node != NULL else { + return Node::new(v); + } + + if v < node.value { + node.left = BST::_insert(node.left, v); + } else if v > node.value { + node.right = BST::_insert(node.right, v); + } + + return node; + } + + fn insert(self, v: int) { + self.root = BST::_insert(self.root, v); + } + + fn _print_in_order(node: Node*) { + if node != NULL { + BST::_print_in_order(node.left); + "{node.value} "..; + BST::_print_in_order(node.right); + } + } + + fn print_all(self) { + BST::_print_in_order(self.root); + ""; + } + + fn _free(node: Node*) { + if node != NULL { + BST::_free(node.left); + BST::_free(node.right); + free(node); + } + } + + fn free(self) { + BST::_free(self.root); + self.root = NULL; + } +} + +fn main() { + var tree = BST::new(); + defer tree.free(); + + "Inserting: 50, 30, 20, 40, 70, 60, 80"; + tree.insert(50); + tree.insert(30); + tree.insert(20); + tree.insert(40); + tree.insert(70); + tree.insert(60); + tree.insert(80); + + "In-Order Traversal: "..; + tree.print_all(); + + "Expected: 20 30 40 50 60 70 80"; + +} -- cgit v1.2.3