The inorder sequence will resolve the left-right problem, and the other sequence (pre or post) will tell us the roots of the various subtrees. For example, if inorder is CBA, and preorder is CAB, then we know that C is at the root, and both B and A are in the right subtree
Question1:
An array which is a Post order traversal of a Binary Tree. Write a function to check if the Binary Tree formed from the array is a Binary Search Tree.
Eg:
2
1 3
The array given as input would be 1 3 2.
Write a function to say if the tree formed is a Binary Search Tree.
Example 2: 4 is root. 0 is left child of 1 , 1 is left child of 2 and 2 is left child of 4. 5 is right child of 4 and 6 is right child of 5.
4
2 5
1 6
0
0 1 2 6 5 4 is the input array.
No need to reconstruct a BST and cannot either.
bool isPostTraversalOfBST(int arr[], int n)
{
if(n < 2) return true;
int i = 0;
//try to find out the beginning of right subtree's traversal
for(; arr[i] < arr[n-1]; ++i) ;
//check if all arr[i,n-1) >= arr[n-1]
for(int j = i + 1; j + 1 < n; ++j){
if(arr[j] < arr[n-1]) return false;
}
//check if both two parts are post traversals of BSTs
return isPostTraversalOfBST(arr, i) &&
isPostTraversalOfBST(arr + i, n - i - 1);
}