Typed functional languages usually do, as mentioned by others. This is form of Algebraic Data Type called a Sum Type (as oppose to a Product type, which is basically a normal struct).
Here’s some examples of creating a binary tree in different languages (also Lemmy’s code formatter is terrible)
Examples
Haskell
data Treea= Empty | Leaf a | Node (Tree a) (Tree a)
F#
typeTree<'a> = Empty | Leaf of 'a | Node of (Tree<'a> * Tree<'a>)
Typed functional languages usually do, as mentioned by others. This is form of Algebraic Data Type called a Sum Type (as oppose to a Product type, which is basically a normal struct).
Here’s some examples of creating a binary tree in different languages (also Lemmy’s code formatter is terrible)
Examples
Haskell
data Tree a = Empty | Leaf a | Node (Tree a) (Tree a)F#
type Tree<'a> = Empty | Leaf of 'a | Node of (Tree<'a> * Tree<'a>)Scala
sealed trait Tree[+A]case class Empty[A]() extends Tree[A]case class Leaf[A](a: A) extends Tree[A]case class Node[A](left: Tree[A], right: Tree[A]) extends Tree[A]Rust
enum Tree<T> { Empty, Leaf(T), Node(Box<Tree<T>>, Box<Tree<T>>),}