Pertemuan ke-5 - Property of binary tree - 2101640795 - Michael Kesta
There is a relationship between internal nodes and external
nodes i.e. If the number of internal nodes is N, the number of external nodes
will be N+1. Let us discuss another property of the binary trees.
Property
A binary tree with N internal nodes has 2N links, N-1 links to
internal nodes and N+1 links to external nodes.
Please recall that the first property dealt with the
relationship between internal and external nodes. This property is dealing with
the relationship of links to the internal nodes.
Now, what is a link? As you might already have understood, a
link is that line, which we draw between two nodes in a tree. Internally we use
pointers in C++ to realize links. In pictorial sketches, however, we use a line
to show a link between the two nodes. The property defines, that if you have a
binary tree with Nodes, how many links, it will have between the internal nodes
(remember, it includes the leaf nodes), and how many links it will have between
the external nodes. We have not been showing any links between the external
nodes in the diagrams. These are, in fact, null pointers. That means, these are
the links, which we will show with the help of the square nodes. Let us see a
binary tree, on the basis of which, we will further explore this property. In
the following figure, the binary tree is shown again, which, in addition to the
normal links between the internal nodes, also contains external nodes as
squares and the external links as lines going to those squares.
Now if you count the total number of links in the diagram
between internal and external nodes, it will be 2N. Remember, we are talking
about links and not nodes. In this tree, we have 9 nodes marked with capital
letters, 8 internal links and 10 external links. Adding the both kinds of
links, we get 18, which is exactly 2 x 9.
As discussed already that these properties are mathematical
theorems and can therefore be proven mathematically. Let us now prove this
property as to how do we get 2N links in a binary tree with N internal nodes.
Property
A binary tree with N internal nodes has 2N links, N-1 links to
internal nodes and N+1 links to external nodes.
- In every rooted tree, each node, except the root, has a unique
parent.
- Every link connects a node to its parents, so there are N-1
links connecting internal nodes.
- Similarly each of the N+1 external nodes has one link to its
parents.
- Thus N-1+N+1=2N links.
In the previous lectures, I told you about the important
property of the trees, that they contain only one link between the two nodes. I
had also shown you some structures, which did not follow this property and I
told you, that those were graphs.
Threaded Binary Trees
- In many applications binary tree traversals are carried out
repeatedly.
- The overhead of stack operations during recursive calls can be
costly.
- The same would true if we use a non-recursive but stack-driven
traversal procedure
- It would be useful to modify the tree data structure which
represents the binary tree so as to speed up, say, the inorder traversal
process: make it "stack-free".
You must be remembering that there were four traversing methods
of binary trees: preorder, inorder,
postorder and levelorder. First three preorder, inorder and
postorder were implemented using recursion. Those recursive routines were very
small, 3 to 4 lines of code and they could be employed to traverse a tree of
any size.
We also traversed BST in inorder to retrieve the information in
sorted order. We employed stacks in recursive implementations. Although,
recursive routines are of few lines but when recursion is in action, recursive
stack is formed that contains the function calls. We also explicitly used stack
for inorder non-recursive traversal. When the calling pattern of recursive and
non-recursive stack based routines were compared, the calling pattern of both
of the routines were similar.
Suppose that we have a BST that is traversed again and again for
some operations of find or print. Due to lot of recursive operations, the stack
size keeps on growing. As a result, the performance is affected. To overcome
this performance bottleneck, we can use non-recursive method but stack-driven
traversal will again be an issue. The push and pop operations of stack for
insertion and retrieval will again take time. So is there a way to do traversal
without using a stack neither of implicit function call stack nor explicit. The
same idea is presented in the last bullets above that leads to threaded binary
trees:
- It would be useful to modify the tree data structure which
represents the binary tree so as to speed up, say, the inorder traversal
process: make it "stack-free".
The idea in the above statement is to modify the tree data
structure to speed up and make it stack-free. Now, we see what kind of
modification is required in the binary trees.
- Oddly, most of the pointer fields in our representation of
binary trees are NULL!
- Since every node (except the root) is pointed to, there are only
N-1 non-NULL pointers out of a possible 2N (for an N node tree), so that N+1
pointers are NULL.
We know that all the leaf node pointers are NULL. Each node of
the tree contains the data part, two pointer variables for left and right nodes
links. But these pointer variables are used when the node has further child
nodes. We know that in a binary tree the total number of links are 2N including
both internal and external and the number of NULL pointers is N+1.
Komentar
Posting Komentar