# Strahler number

In mathematics, the **Strahler number** or **Horton–Strahler number** of a mathematical tree is a numerical measure of its branching complexity.

These numbers were first developed in hydrology by Robert E. Horton (1945) and Arthur Newell Strahler (1952, 1957); in this application, they are referred to as the **Strahler stream order** and are used to define stream size based on a hierarchy of tributaries. They also arise in the analysis of L-systems and of hierarchical biological structures such as (biological) trees and animal respiratory and circulatory systems, in register allocation for compilation of high-level programming languages and in the analysis of social networks. Alternative stream ordering systems have been developed by Shreve^{[1]}^{[2]} and Hodgkinson et al.^{[3]}

## Contents

## Definition

All trees in this context are directed graphs, oriented from the root towards the leaves; in other words, they are arborescences. The degree of a node in a tree is just its number of children. One may assign a Strahler number to all nodes of a tree, in bottom-up order, as follows:

- If the node is a leaf (has no children), its Strahler number is one.
- If the node has one child with Strahler number
*i*, and all other children have Strahler numbers less than*i*, then the Strahler number of the node is*i*again. - If the node has two or more children with Strahler number
*i*, and no children with greater number, then the Strahler number of the node is*i*+ 1.

The Strahler number of a tree is the number of its root node.

Algorithmically, these numbers may be assigned by performing a depth-first search and assigning each node's number in postorder. The same numbers may also be generated via a pruning process in which the tree is simplified in a sequence of stages, where in each stage one removes all leaf nodes and all of the paths of degree-one nodes leading to leaves: the Strahler number of a node is the stage at which it would be removed by this process, and the Strahler number of a tree is the number of stages required to remove all of its nodes. Another equivalent definition of the Strahler number of a tree is that it is the height of the largest complete binary tree that can be homeomorphically embedded into the given tree; the Strahler number of a node in a tree is similarly the height of the largest complete binary tree that can be embedded below that node.

Any node with Strahler number *i* must have at least two descendants with Strahler number *i* − 1, at least four descendants with Strahler number *i* − 2, etc., and at least 2^{i − 1} leaf descendants. Therefore, in a tree with *n* nodes, the largest possible Strahler number is log_{2} *n* + 1.^{[4]} However, unless the tree forms a complete binary tree its Strahler number will be less than this bound. In an *n*-node binary tree, chosen uniformly at random among all possible binary trees, the expected index of the root is with high probability very close to log_{4} *n*.^{[5]}

## Applications

### River networks

In the application of the Strahler stream order to hydrology, each segment of a stream or river within a river network is treated as a node in a tree, with the next segment downstream as its parent. When two **first-order** streams come together, they form a **second-order** stream. When two second-order streams come together, they form a **third-order** stream. Streams of lower order joining a higher order stream do not change the order of the higher stream. Thus, if a first-order stream joins a second-order stream, it remains a second-order stream. It is not until a second-order stream combines with another second-order stream that it becomes a third-order stream. As with mathematical trees, a segment with index *i* must be fed by at least 2^{i − 1} different tributaries of index 1. Shreve noted that Horton’s and Strahler’s Laws should be expected from any topologically random distribution. A later review of the relationships confirmed this argument, establishing that, from the properties the laws describe, no conclusion can be drawn to explain the structure or origin of the stream network.^{[3]}^{[6]}

To qualify as a stream a hydrological feature must be either recurring or perennial. Recurring (or "intermittent") streams have water in the channel for at least part of the year. The index of a stream or river may range from 1 (a stream with no tributaries) to 12 (the most powerful river, the Amazon, at its mouth). The Ohio River is of order eight and the Mississippi River is of order 10. Estimates are that 80% of the streams on the planet are first to third order headwater streams.^{[7]}

If the bifurcation ratio of a river network is low, there is a higher chance of flooding, as the water will be concentrated in one channel rather than spread out, as a higher bifurcation ratio would indicate. The bifurcation ratio can also show which parts of a drainage basin is more likely to flood, comparatively, by looking at the separate ratios. Most British rivers have a bifurcation ratio of between 3 and 5.^{[8]}

Gleyzer et al. (2004) describe how to compute Strahler stream order values in a GIS application. This algorithm is implemented by RivEX, an ESRI ArcGIS 10.2.1 tool. The input to their algorithm is a network of the centre lines of the bodies of water, represented as arcs (or edges) joined at nodes. Lake boundaries and river banks should not be used as arcs, as these will generally form a non-tree network with an incorrect topology.

### Other hierarchical systems

The Strahler numbering may be applied in the statistical analysis of any hierarchical system, not just to rivers.

- Arenas et al. (2004) describe an application of the Horton–Strahler index in the analysis of social networks.
- Ehrenfeucht, Rozenberg & Vermeir (1981) applied a variant of Strahler numbering (starting with zero at the leaves instead of one), which they called
**tree-rank**, to the analysis of L-systems. - Strahler numbering has also been applied to biological hierarchies such as the branching structures of trees
^{[9]}and of animal respiratory and circulatory systems.^{[10]}

### Register allocation

When translating a high-level programming language to assembly language the minimum number of registers required to evaluate an expression tree is exactly its Strahler number. In this context, the Strahler number may also be called the **register number**.^{[11]}

For expression trees that require more registers than are available, the Sethi–Ullman algorithm may be used to translate an expression tree into a sequence of machine instructions that uses the registers as efficiently as possible, minimizing the number of times intermediate values are spilled from registers to main memory and the total number of instructions in the resulting compiled code.

## Related parameters

### Bifurcation ratio

Associated with the Strahler numbers of a tree are *bifurcation ratios*, numbers describing how close to balanced a tree is. For each order *i* in a hierarchy, the *i*th bifurcation ratio is

where *n _{i}* denotes the number of nodes with order

*i*.

The bifurcation ratio of an overall hierarchy may be taken by averaging the bifurcation ratios at different orders. In a complete binary tree, the bifurcation ratio will be 2, while other trees will have smaller bifurcation ratios.It is a dimensionless number

### Pathwidth

The pathwidth of an arbitrary undirected graph *G* may be defined as the smallest number *w* such that there exists an interval graph *H* containing *G* as a subgraph, with the largest clique in *H* having *w* + 1 vertices. For trees (viewed as undirected graphs by forgetting their orientation and root) the pathwidth differs from the Strahler number, but is closely related to it: in a tree with pathwidth *w* and Strahler number *s*, these two numbers are related by the inequalities^{[12]}

*w*≤ s ≤ 2*w*+ 2.

The ability to handle graphs with cycles and not just trees gives pathwidth extra versatility compared to the Strahler number. However, unlike the Strahler number, the pathwidth is defined only for the whole graph, and not separately for each node in the graph.

## See also

- Main stem of a river, typically found by following the branch with the highest Strahler number

## Notes

- ↑ Shreve, R.L., 1966. Statistical law of stream numbers. Journal of Geology 74, 17–37.
- ↑ Shreve, R.L., 1967. Infinite topologically random channel networks. Journal of Geology 75, 178–186.
- ↑
^{3.0}^{3.1}Hodgkinson, J.H., McLoughlin, S. & Cox, M.E. 2006. The influence of structural grain on drainage in a metamorphic sub-catchment: Laceys Creek, southeast Queensland, Australia. Geomorphology, 81: 394-407. - ↑ Devroye & Kruszewski (1996).
- ↑ Devroye and Kruszewski (1995, 1996).
- ↑ Kirchner, J.W., 1993. Statistical inevitability of Horton Laws and the apparent randomness of stream channel networks. Geology 21, 591–594.
- ↑
**Lua error in package.lua at line 80: module 'strict' not found.** - ↑ Waugh (2002).
- ↑ Borchert & Slade (1981)
- ↑ Horsfield (1976).
- ↑ Ershov (1958); Flajolet, Raoult & Vuillemin (1979).
- ↑ Luttenberger & Schlund (2011), using a definition of the "dimension" of a tree that is one less than the Strahler number.

## References

**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.****Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.****Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.**Lua error in package.lua at line 80: module 'strict' not found.**.