Inorder Sucessor

Moderate
0/80
Average time to solve is 30m
profile
Contributed by
34 upvotes
Asked in companies
SAP LabsInnovaccerAmazon

Problem statement

You have been given an arbitrary binary tree and a node of this tree. You need to find the inorder successor of this node in the tree.

The inorder successor of a node in a binary tree is that node that will be visited immediately after the given node in the inorder traversal of the tree. If the given node is visited last in the inorder traversal, then its inorder successor is NULL.

The inorder traversal of a binary tree is the traversal method in which for any node its left subtree is visited first, then the node itself, and then the right subtree.

Note
1. Each node is associated with a unique integer value. 

2. The node for which the successor is to be found is guaranteed to be part of the tree.
Detailed explanation ( Input/output format, Notes, Images )
Input Format:
The first line contains a single integer 'T' representing the number of test cases. 

The first line of each test case will contain the values of the nodes of the tree in the level order form ( -1 for NULL node) Refer to the example for further clarification.

The second and the last line of each test case will contain the value of the node for which the inorder successor is to be found.

Example: 
Consider the binary tree:

altImage

The input of the tree depicted in the image above will be like: 
 1
 2 3
 4 -1 5 6
-1 7 -1 -1 -1 -1
-1 -1

Explanation :
Level 1 :
The root node of the tree is 1

Level 2 :
Left child of 1 = 2
Right child of 1 = 3

Level 3 :
Left child of 2 = 4
Right child of 2 = null (-1)
Left child of 3 = 5
Right child of 3 = 6

Level 4 :
Left child of 4 = null (-1)
Right child of 4 = 7
Left child of 5 = null (-1)
Right child of 5 = null (-1)
Left child of 6 = null (-1)
Right child of 6 = null (-1)

Level 5 :
Left child of 7 = null (-1)
Right child of 7 = null (-1)

The first not-null node (of the previous level) is treated as the parent of the first two nodes of the current level. The second not-null node (of the previous level) is treated as the parent node for the next two nodes of the current level and so on.

The input ends when all nodes at the last level are null (-1).
Output Format:
For each test case, print a single line that contains the value of the successor node, or NULL if it does not have an inorder successor.

The output of each 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
2 <= 'N' <= 10 ^ 3  
1 <=  'NODEVALUE' <= 10 ^ 9

Where 'N' is the number of nodes and 'NODEVALUE' is the value of the node.

Time Limit: 1sec.
Sample Input 1:
1
1 2 3 4 5 -1 -1 -1 -1 -1 -1 
2
Sample Output 1:
5
Explanation of the Sample Input1:
The tree can be represented as follows:

altImage

The inorder traversal of this tree will be 4 2 5 1 3.
As the root is ‘1’, we first visit its left subtree which is rooted at 2, thus then we visit the left subtree of ‘2’, which is rooted at ‘4’. The left subtree of ‘4’ is NULL, so we visit the root i.e ‘4’. This process is continued.
So the order would be 4 -> 2 -> 5 -> 1 -> 3.
Clearly after the node with value = 2, the node with value = 5 is visited. So, 5 is the answer
Sample Input 2:
1
10 5 6 -1 -1 -1 -1
6
Sample Output 2:
NULL
Hint

Store the nodes in the order of inorder traversal

Approaches (3)
Inorder Traversal
  • The fact that all the data values are unique makes the solution look very intuitive.
  • We can simply store the inorder traversal of the given tree in some data structure, most probably arrays, and find the element present after the given node in the array.
  • For inorder traversal, we can write a simple recursion code, where for every node, its left subtree is visited recursively, and then the node is visited(its value stored in the array), and then its right subtree.
  • After the traversal, we can find the required data value in the array, and if that value is not present at the end of the array, our answer will be the next element, or NULL otherwise.
Time Complexity

O(N), where ‘N’ is the number of non-NULL nodes.

 

As we are traversing each node once, the complexity is proportional to the size of the tree.

Space Complexity

O(N), where ‘N’ is the number of non-NULL nodes.

 

The maximum size of the array used to store the inorder traversal will be equal to the number of nodes in the tree.

Code Solution
(100% EXP penalty)
Inorder Sucessor
Full screen
Console