# k-ary tree

In graph theory, a k-ary tree is a rooted tree in which each node has no more than k children. It is also sometimes known as a k-way tree, an N-ary tree, or an M-ary tree. A binary tree is the special case where k=2.

## Types of k-ary trees

• A full k-ary tree is a k-ary tree where within each level every node has either 0 or k children.
• A perfect k-ary tree is a full[1] k-ary tree in which all leaf nodes are at the same depth.[2]
• A complete k-ary tree is a k-ary tree which is maximally space efficient. It must be completely filled on every level except for the last level. However, if the last level is not complete, then all nodes of the tree must be "as far left as possible".[1]

## Properties of k-ary trees

• For a k-ary tree with height h, the upper bound for the maximum number of leaves is ${\displaystyle k^{h}}$.
• The height h of a k-ary tree does not include the root node, with a tree containing only a root node having a height of 0.
• The height of a tree is equal to the maximun depth D of any node in the tree
• The total number of nodes ${\displaystyle N}$ in a perfect k-ary tree is ${\displaystyle \sum _{i=0}^{h}k^{i}={\frac {k^{h+1}-1}{k-1}}}$, while the height h is
${\displaystyle {\frac {k^{h+1}-1}{k-1}}\geq N>{\frac {k^{h}-1}{k-1}}}$
${\displaystyle k^{h+1}\geq (k-1)\cdot N+1>k^{h}}$
${\displaystyle h+1\geq log_{k}\left((k-1)\cdot N+1\right)>h}$
${\displaystyle h>=\left\lceil \log _{k}((k-1)\cdot N+1)-1\right\rceil .}$
By the definition of Big-Ω, the maximum depth
${\displaystyle D=h>=\left\lceil \log _{k}((k-1)\cdot N+1)-1\right\rceil =O(log_{k}(n))=O(log(n)/log(k))}$

## Methods for storing k-ary trees

### Arrays

k-ary trees can also be stored in breadth-first order as an implicit data structure in arrays, and if the tree is a complete k-ary tree, this method wastes no space. In this compact arrangement, if a node has an index i, its c-th child in range [1..k] is found at index ${\displaystyle k\cdot i+c}$, while its parent (if any) is found at index ${\displaystyle \left\lfloor {\frac {i-1}{k}}\right\rfloor }$ (assuming the root has index zero, meaning a 0-based array). This method benefits from more compact storage and better locality of reference, particularly during a preorder traversal.