This chapter introduces one of the most fundamental structures in computer science: binary trees. There are lots of ways of defining binary trees. Mathematically, a binary tree is a connected undirected finite graph with no cycles, and no vertex of degree greater than three.
For most computer science applications, binary trees are rooted: A
special node,
, of degree at most two is called the root of the tree. For every node,
, the second node on the path from
to
is called the
parent of
. Each of the other nodes adjacent to
is called a child of
. Most of the binary trees we are interested
in are ordered, so we distinguish between the left child
and right child of
.
In illustrations, binary trees are usually drawn from the root downward, with the root at the top of the drawing and the left and right children respectively given by left and right positions in the drawing (Figure 6.1). A binary tree with nine nodes is drawn this way in Figure 6.2.a.
Binary trees are so important that a terminology has developed around them:
The depth of a node,
, in a binary tree is the length of the
path from
to the root of the tree. If a node,
, is on the path
from
to
then
is called an ancestor of
and
a descendant of
. The subtree of a node,
, is the
binary tree that is rooted at
and contains all of
's descendants.
The height of a node,
, is the length of the longest path from
to one of its descendants. The height of a tree is the height of its root.
A node,
, is a leaf if it has no children.
We sometimes think of the tree as being augmented with external
nodes. Any node that does not have a left child has an external node
as its left child and any node that does not have a right child has an
external node as its right child (see Figure 6.2.b). It is
easy to verify, by induction, that a binary tree having
real nodes has
external nodes.