Height of the Binary Tree From Inorder and Level Order Traversal

Moderate
0/80
Average time to solve is 10m
profile
Contributed by
122 upvotes
Asked in companies
Morgan StanleyAmazonSymphony Talent, LLC

Problem statement

You have been given the Inorder Traversal and Level Order Traversal of a Binary Tree of integers. Your task is to calculate the height of the Binary tree without constructing it.

The height of the binary tree is the number of edges in the longest path from the root node to any leaf node in the tree. In case the tree has only one node, the height is taken to be 0.

Detailed explanation ( Input/output format, Notes, Images )
Input Format:
The first line of input contains an integer ‘T’ denoting the number of test cases to run. Then the test case follows.

The first line of each test case contains an integer  ‘N’ denoting the number of nodes of the binary tree.

The second line of each test case contains ‘N’ single space-separated integers, denoting the Inorder traversal of the binary tree.

The third line of each test case contains ‘N’ single space-separated integers, denoting the Level Order traversal of the binary tree.
Output Format:
For each test case, print the height of the binary tree.

Output for every test case will be printed in a separate line.
Note:
You do not need to print anything; it has already been taken care of. Just implement the given function.
Constraints:
1 <= T <= 100
1 <= N <= 3000
1 <= inorder[i] <= N
1 <= levelOrder[i] <= N

Time Limit: 1 sec
Sample Input 1:
1
5
4 2 5 1 3
1 2 3 4 5
Sample Output 1:
2
Explanation for Sample 1:
The binary tree(rooted at node 1) represented by the above inorder and level order traversals is-

alt text

We can see that the height of the above binary tree is 2.
Sample Input 2:
1
7
7 4 2 1 5 3 6
1 2 3 4 5 6 7
Sample Output 2:
3
Hint

Try to use properties of Inorder and Level order Traversal of the tree.

Approaches (2)
Queue Solution
  • The first element of the Level order Traversal is necessarily the root of the binary tree.
  • The nodes which appear left of the root in the inorder traversal are necessarily in the left subtree, and those which appear in the right are in the right subtree of the right subtree.
  • We can make use of the fact that the nodes of a subtree of the binary tree will form a continuous segment in the inorder array.
  • We can maintain a queue with each element in a queue containing three integers, namely the height of the current subtree, the starting index, and the ending index of the subtree in the inorder array.
  • Then the algorithm is:
    • We will initially push (0, 0, ‘N’ - 1) in the queue.
    • We will start traversing the level order array.
    • When we are at index ‘i’ in the level order array we will pop out the front element of the queue.
      1. Let that popped-out element be ('HEIGHT', ‘LEFTINDEX’, ‘RIGHTINDEX’).
      2. We will start iterating from the ‘LEFTINDEX’ to ‘RIGHTINDEX’ of the inorder array and find the index of element ‘LEVELORDER[i]’ in the inorder array. Let that index be ‘j’.
      3. If ('j' - 1) is greater than equal to leftIndex, we will push ('HEIGHT' + 1, ‘LEFTINDEX’, ‘j’ - 1) into the queue.
      4. Similarly, if ('j' + 1) is less than equal to rightIndex we will push ('HEIGHT' + 1, ‘j’ + 1, 'RIGHTINDEX') into the queue.
    • The maximum height encountered in this process will be the height of the binary tree.
Time Complexity

O(N^2), where N denotes the number of nodes of the binary tree.

 

As we are iterating over the complete level order traversal and for each node, we are finding its position in the inorder traversal, so the time complexity will be O(N^2).

Space Complexity

O(N), where N denotes the number of nodes in the binary tree.

 

As the last layer can have at most N/2 nodes(in case of a complete binary tree), the maximum number of nodes in the queue at any time will be N/2. 

Code Solution
(100% EXP penalty)
Height of the Binary Tree From Inorder and Level Order Traversal
Full screen
Console