|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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: NUMBER OF EDGES |
|
DIRECTED INTO A VERTEX |
|
|
|
OUTDEGREE: NUMBER OF EDGES |
|
DIRECTED OUT OF A VERTEX |
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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: |
|
THE LENGTH OF THE LONGEST PATH TO A LEAF |
|
|
|
E.g. HEIGHT(C) = 2 |
|
HEIGHT(TREE) = HEIGHT(ROOT) = 3 |
|
HEIGHT(E) = 0 |
|
|
|
|
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: |
|
|
|
|
|
|
|
|
PREORDER (NLR – Node, Left, Right) |
|
|
|
1) PROCESS ROOT NODE |
|
|
|
2) TRAVERSE LEFT SUBTREE IN PREORDER |
|
|
|
3) TRAVERSE RIGHT SUBTREE IN PREORDER |
|
|
|
|
|
|
POSTORDER (LRN) |
|
1) TRAVERSE THE LEFT SUBTREE IN POSTORDER |
|
2) TRAVERSE THE RIGHT SUBTREE IN
POSTORDER |
|
3) PROCESS THE ROOT NODE |
|
|
|
E.g. |
|
|
|
|
INORDER (LNR) |
|
1) TRAVERSE THE LEFT SUBTREE IN INORDER |
|
2) PROCESS THE ROOT NODE |
|
3) TRAVERSE THE RIGHT SUBTREE IN INORDER |
|
|
|
E.g. |
|
|
|
|
|
|
|
|
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 – 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 : 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: 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 |
|
|
|
|
|
|
|