Preorder predecessor of a Node in Binary Tree
Given a binary tree and a node in the binary tree, find Preorder predecessor of the given node.
Consider the following binary tree 20 / \ 10 26 / \ / \ 4 18 24 27 / \ 14 19 / \ 13 15 Input : 4 Output : 10 Preorder traversal of given tree is 20, 10, 4, 18, 14, 13, 15, 19, 26, 24, 27. Input : 19 Output : 15
A simple solution is to first store Preorder traversal of the given tree in an array then linearly search given node and print node next to it.
- Time Complexity : O(n)
- Auxiliary Space : O(n)
An efficient solution is based on below observations.
- If the given node is root, then return NULL as preorder predecessor.
- If node is the left child of its parent or left child of parent is NULL, then return parent as its preorder predecessor.
- If node is the right child of its parent and left child of parent exists, then predecessor would be the rightmost node (max value) of the left subtree of parent.
- If node is the right child of its parent and the parent has no left child, then predecessor would be the parent node (max value).
Preorder predecessor of 19 is 15
- Time Complexity : O(h) where h is height of given Binary Tree
- Auxiliary Space : O(1) since no use of arrays, stacks, queues.