diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-11 21:13:29 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-11 21:13:50 +0000 |
| commit | 36938b584ea2d096d97a124b70da51f685850ff7 (patch) | |
| tree | 768c132d8a661c74f36683005548cf6afb163714 /examples/data_structures/binary_tree.zc | |
| parent | ff32e7b6b99dd9b17b4c581e6c48308128f46c52 (diff) | |
A few examples, some more will be added soon.
Diffstat (limited to 'examples/data_structures/binary_tree.zc')
| -rw-r--r-- | examples/data_structures/binary_tree.zc | 91 |
1 files changed, 91 insertions, 0 deletions
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<Self>(); + 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"; + +} |
