Suppose we have the preorder traversal of a binary search tree (BST). We have to check whether each internal node has only one child or not.
So, if the input is like preorder = [22, 12, 13, 15, 14], then the output will be True as BST is like −
To solve this, we can follow one efficient approach. As all decedents of a node is either smaller or larger, then we can we can follow these steps −
Get the next preorder successor of the node
Get the last preorder successor of the node
Now when both the successors are less than or greater than the current node then check again otherwise return false.
To solve this, we will follow these steps −
- next := 0, last := 0
- for i in range 0 to size of preorder - 1, do
- next := preorder[i] - preorder[i+1]
- last := preorder[i] - last value of preorder
- if next * last < 0, then
- return False
- return True
Let us see the following implementation to get better understanding −
Example
def solve(preorder): next = 0 last = 0 for i in range(len(preorder)-1): next = preorder[i] - preorder[i+1] last = preorder[i] - preorder[-1] if next * last < 0: return False return True preorder = [22, 12, 13, 15, 14] print(solve(preorder))
Input
[22, 12, 13, 15, 14]
Output
True