DATA STRUCTURES -- TREES
BEFORE TREES – A more general structure
Graph G = (V, E)
V = Vertices
E = Edges
Undirected Graph
V = {1,2,3} E = {(1,2),(2,3),(3,1)}
Note:  (1,2) and (2,1) are the same edge
VERTEX SYNONOMOUS WITH NODE

"Directed Graph"
Directed Graph
PATHS:  e.g. {(3,3),(3,4),(4,1)}
CYCLE: e.g. {(1,2),(2,5),(5,4),(4,1)}
ACYCLIC: DIRECTED GRAPH WITH NO CYCLE

"INDEGREE:"
INDEGREE: NUMBER OF EDGES
DIRECTED INTO A VERTEX
OUTDEGREE: NUMBER OF EDGES
DIRECTED OUT OF A VERTEX

TREES, cont’d
DEF: A TREE IS AN ACYCLIC
DIGRAPH  WHICH HAS ONE
  NODE OF INDEGREE 0 (ROOT)
  AND ALL OTHER NODES
  ARE OF INDEGREE 1
DEF: A FOREST IS A (DISJOINT) UNION
OF A NUMBER OF TREES

E.g. TREES
A IS THE ROOT IN ALL 3 EXAMPLES
LEVEL OR DEPTH:
LEVEL(ROOT) = 0
LEVEL(NODE) = LENGTH OF PATH FROM ROOT TO NODE (NUMBER OF         EDGES)
E.g.   LEVEL(B) = 1, LEVEL(D) = 2 IN     ABOVE

TREES, CONT’D
NOTE: EVERY NODE (EXCEPT A) IS A
DECENDANT OF A
B, C, D ARE CALLED SIBLINGS
C IS A PARENT OF F

"HEIGHT OF A VERTEX:"
HEIGHT OF A VERTEX:
THE LENGTH OF THE LONGEST PATH TO A LEAF
E.g. HEIGHT(C) = 2
HEIGHT(TREE) = HEIGHT(ROOT) = 3
HEIGHT(E) = 0

"TREES,"
TREES, CONT’D
DEF: A BINARY TREE IS ONE FOR WHICH
1) EACH CHILD IS EITHER A LEFT OR RIGHT CHILD
2) NO VERTEX HAS MORE THAN 2 CHILDREN
i.e. Vertex V đ Outdegree(V) ≤ 2
E.g.’s:

TREE TRAVERSALS
PREORDER (NLR – Node, Left, Right)
1) PROCESS ROOT NODE
2) TRAVERSE LEFT SUBTREE IN PREORDER
3) TRAVERSE RIGHT SUBTREE IN PREORDER

"E.G."
E.G.

TREE TRAVERSALS, CONT’D
POSTORDER (LRN)
1) TRAVERSE THE LEFT SUBTREE IN POSTORDER
2) TRAVERSE THE RIGHT SUBTREE IN POSTORDER
3) PROCESS THE ROOT NODE
E.g.

TREE TRAVERSALS, CONT’D
INORDER (LNR)
1) TRAVERSE THE LEFT SUBTREE IN INORDER
2) PROCESS THE ROOT NODE
3) TRAVERSE THE RIGHT SUBTREE IN INORDER
E.g.

ARITHMETIC EXPRESSION TREES

ARITHMETIC EXPRESSION TREES

"Example Tree Object Methods"
Example Tree Object Methods
*Construct (initialize) a tree object
*Build a tree object from a given set of data
*Destroy (delete) a tree object
*Create a node object in a tree object
*Delete a node object in a tree object
*Check to see if a tree object is empty
*Add/insert a node object specified by a key value
*Search for a node object specified by a key value
*Search for a predecessor (successor) of a single key element

"Example Tree Object Methods –..."
Example Tree Object Methods – Cont’d
* Get a specified attribute using a single search key
*Update a node object with new data
*Retrieve data contained in a node object
*Sort a tree object
*Display (print) a tree or subtree object
*Print a node object
*Traverse a tree object

"// bc_tree.h :..."
// bc_tree.h : Define an abstract base class “Tree”
Class Tree {
public:
virtual BOOLEAN is_empty (void) = 0;
virtual void build_tree (DATA_TYPE A[]) = 0;
virtual void add_node (DATA_TYPE node_data) = 0;
virtual void search_node (DATA_TYPE srch_key) = 0;
virtual void delete_node (DATA_TYPE srch_key) = 0;
virtual void postorder (void) = 0;
virtual void preorder (void) = 0
virtual void inorder (void) = 0;

"Definition:"
Definition: A binary search tree (BST) is a binary tree; it is either empty or contains a root node along with left and right binary search subtrees such that:
(1) the root node (data object) contains an attribute designated as the key
(2) all nodes in the left subtree of the root contain keys of value (numerically or alphabetically) less than or equal to the key of the root node
(3) all nodes in the right subtree of the root contain keys of value greater than the key of the root node

A Binary Search Tree (BST)

A Binary_Search_Tree Object

BST Insert Operations