After a few surprise encounters with binary trees last week, I thought it'd be good for me to finally get more familiar with them so that later I can tackle binary tree problems with more confidence and less angst.
This is simply an introduction to trees and the different parts that make up the structure. I also touch on what various binary tree structures can look like and why trees, especially binary trees, are applicable and useful.
Behold, a perfect specimen of the tree data structure in its natural habitat, shot by Marty Kugler
A tree is a data structure that looks like an upside-down tree consisting of nodes. A binary tree is a structure of nodes that each point to no more than two children.
A tree is a structure composed of nodes that each contains a value or data. The root is a single node located at the top of the tree. It is the start of the tree where nodes point to child nodes connected by branchlets called edges. A subtree, much like a clipping, is a subsection or part of a tree.
The root of this tree is the parent of two child nodes, each either a left or a right child. Two children or sub-trees of a shared parent are siblings. It's possible for a child to also be the parent of two other child nodes further down the branch.
As we follow a branch down from a parent node, any other node located down that branch is its descendent. And if we follow a branch upwards from a child node, any node up that branch is an ancestor of the child node.
At the bottom or terminal of a branch is the leaf or external node, which has no children. Nodes that branch further to one or more child nodes are branch or internal nodes.
When we describe a binary tree, we can discuss its height or its depth.
When we talk about a node's depth, we're specifying how many branches or levels down a node is from the root.
However, when we talk about height, we can either describe the height of a node or the height of the tree. In both cases, we're describing the distance from an external node to the node or root.
Binary trees can be structured differently and possess different kinds of characteristics or qualities.
A full or strictly binary tree is structured so that every node possesses either two or no children.
A complete binary tree is a tree where nodes at every level but the last is required to have two children. On the last level, the children are positioned as far to the left as possible. So, complete binary tree nodes are connected from top to bottom, left to right.
A perfect binary tree is both full and complete. All the leaf nodes are located at the same depth, and all internal nodes have two children.
A balanced binary tree describes a tree where two sibling subtrees don't differ in height by more than one level. If the difference in height is greater than that, then it is unbalanced.
If every node in a tree has only one child, the structure is a degenerate or pathological tree, and is essentially a linked list.
Like the family trees many of us are familiar with, trees are hierarchical and can represent structural relationships in the data. More technological examples and applications of trees can be the DOM or your file directory.
Binary Search Trees (BSTs) are especially useful in algorithms because they are naturally sorted, which makes search, insertion, and deletion of values especially quick and efficient. This is definitely worth diving into in another blog post!
For more information on binary trees, check out these other blogs from my 5-part binary tree series!