Professional Documents
Culture Documents
Lecture 23: Memory Representation of Trees, Traversal Algorithms
Lecture 23: Memory Representation of Trees, Traversal Algorithms
Summary of Lecture:
There are three standard ways of traversing a binary tree T with root R. These three
algorithms, called preorder, inorder and postorder, are as follows:
Preorder: (1) Process the root R.
(2) Traverse the left sub tree of R in preorder.
(3) Traverse the right subtree of R in preorder.
Observe that each algorithm contains the same three steps, and that the left subtree of R is
37
always traversed before the right subtree. The difference between the algorithms is the
lime at which the root R is processed. Specifically, in the "pre" algorithm, the root R is
processed before the subtrees are traversed; in the "in" algorithm, the root R is processed
between the traversals of the subtrees; and in the "post" algorithm, the root R is processed
after the sub trees are traversed.
The three algorithms are sometimes called, respectively, the node-left-right (NLR)
traversal, the left-node-right (LNR) traversal and the left-right-node (LRN) traversal.
Preorder Traversal
The preorder traversal algorithm uses a variable PTR (pointer), which will contain the
location of the node N currently being scanned. This is pictured in fig below where L(N)
denotes the left child of node N and R(N) denotes the right child. The algorithm also uses
an array STACK, which will hold the addresses of nodes for future processing.
38
Algorithm: Initially push NULL onto STACK and then set PTR: = ROOT. Then repeat
the following steps until PTR = NULL or, equivalently, while PTR ≠ NULL.
(a) Proceed down the left-most path rooted at PTR, processing each node N on
the path and pushing each right child R (N), if any, onto STACK. The
traversing ends after a node N with no left child L (N) is processed. (Thus
PTR is updated using the assignment PTR: = LEFT[PTR], and the
traversing stops when LEFT[PTR] = NULL.)
(b) [Backtracking.] Pop and assign to PTR the top element on STACK.
If PTR≠NULL, then return to Step (a); otherwise Exit.
(We note that the initial element NULL on STACK is used as a sentinel.)
Inorder Traversal
The inorder traversal algorithm also uses a variable pointer PTR, which will contain the
location of the node N currently being scanned, and an array STACK, which will hold the
addresses of nodes for future processing. In fact, with this algorithm, a node is processed
only when it is popped from STACK.
Algorithm:
Initial by push NULL onto STACK (for a sentinel) and then set PTR: = ROOT. Then
repeat the following steps until NULL is popped from STACK.
(a) Proceed down the left-most path rooted at PTR, pushing each node N onto
STACK and stopping when a node N with no left child is pushed onto
39
STACK.
(b) [Backtracking.] Pop and process the nodes on STACK. If NULL is popped,
then Exit. If a node N with a right child R(N) is processed, set PTR = R(N) (by
assigning PTR: = RIGHT[PTRD and return to Step (a).
Review Questions:
Define:
Tree
Binary tree
Node
Child
Siblings
Similar trees
Degree of a tree
Path
Successors
Copy tree
Terminal nodes
Depth of a Tree
40