Hi Shashank,
Please find below the psuedocode for constructing the Binary tree from pre
and post order traversal.
My assumption was that given pre and post order traversal of a tree, binary
tree can be constructed of any form. Correct me if I am wrong..
Lets assume the pre and post order traversals of the tree are stored in an
array.
Pre order traversal: Pre[1..n]
Post order traversal: Post[1..n]
where n is the # of nodes in the tree.
root: empty for the new binary tree..
For simplicity, leaving the linear search traversal and creating node,
handling ptrs.. in tree construction
// Check whether ith node in post order array is before jth node in post
order array.
// Returns true if ith node is before jth node in post order array, else
false.
// where i and j are indices in the pre-order tree
bool is_child_node(int i, int j) {
k = array index of of pre[i] in post order tree (linear search in post
order tree)
l = array index of pre[j] in post order tree (linear search in post order
tree)
return (k <= l)
}
int add_node_to_tree(parent, child) {
if (!parent) return -1;
// add as left child if no children..
if (!parent->left)
parent->left = child;
else if (!parent->right)
parent->right = child;
else
print ("DEBUG: parent already has 2 children.. cannot add extra
node..");
return 0;
}
// Traverse the pre-order tree linearly. Make a note of its predecessors in
the same tree.
// Search for the array index position of the current entry and the
predecessor in the post-order tree.
// If the current entry index is before the predecessor index in the post
order tree,
// the predeccesor is parent of current entry index. Else, go to next
predecessor.
int create_bin_tree_from_pre_post_order(pre, post, n) {
if (!n) print("pre and post order lists are empty.."; return -1;
//for simplicity: array indices start from 1.
root = create_node(pre[1]);
for (int i = 2; i <=n; i++) {
create_node(pre[i]);
for (int j = i-1; j >= 0; j--) { // j goes to 0 to handle the
error...
if (!j) print ("ERROR: failed to find pre[i] root in the tree"),
return -1;
if (is_child_node(i, j) {
parent = pre[j], child = pre[i];
add_node_to_tree(parent, child);
break;
}
}
}
// Traverse from root to display the constructed tree..
return 0;
}
This psuedocode is cursory and written naively in hurry. There might be
obvious bugs. Let me know.
Thanks,
Balaji
On Tue, Feb 1, 2011 at 10:55 AM, bittu <[email protected]> wrote:
> Given a Special BT in which Each Non Leaf Node Except Root Has at-
> least two children .Given Pre-order and Post-order of Tree Your Task
> is to design the tree From the Given Information..
>
>
> Thanks & Regards
> Shashank Mani
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<algogeeks%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.