*  A tree is a non-linear data structure where a node can have zero or more
 *  connections. The topmost node in a tree is called **root**. The linked
 *  nodes to the root are called **children** or **descendants**. A node without
 *  any children is called a **leaf** or **terminal node**. All nodes except 
 *  for the leaf and root node are called **internal nodes**.
 *  The **height of a tree** is the distance (edge count) from the farthest
 *  leaf to the root. The **depth of a tree** is the distance from the root 
 *  to the farthest leaf.
 *  The **height of a node** is obtained by counting the edges (connections)
 *  between the node and the most distant leaf.
 *  There are certain constraints a Tree structure must observe:
 *  - It can't have a circular loop. That would be a {@link Graph}[Graph]
 *  - A node can't have more than two parents. That too would be a {@link Graph}[Graph]
 *  - It must have only one root.
 *  - It can't have branches not connected to the root or its descendants.
 *  A tree where each node has at most two children is called a **binary tree**.
 *  @module trees

const BinarySearchTree = require("./bst")

module.exports = {
  /** @type BinarySearchTree */