**Ordered Trees**: when the order of subtrees is significant.

**Unordered:** maybe a family tree.

**Ordered:** maybe left child comes before right child in
alphabetical order.

**Structural definition of binary trees:** a binary tree is
either *empty* or its has 3 parts:

- value
- left subtree
- right subtree

Properties of recursive data structures can usually be computed in a recursive manner that mirrors their definition.

int size (binary_tree *t) { return is_empty(t) ? 0 : 1 + size(t->left) + size(t->right); }