Check if a given array can represent Preorder Traversal of Binary Search Tree - GeeksforGeeks



Check if a given array can represent Preorder Traversal of Binary Search Tree - GeeksforGeeks

Check if a given array can represent Preorder Traversal of Binary Search Tree

Given an array of numbers, return true if given array can represent preorder traversal of a Binary Search Tree, else return false. Expected time complexity is O(n).

Examples:

Input:  pre[] = {2, 4, 3}  Output: true  Given array can represent preorder traversal  of below tree      2       \        4       /      3    Input:  pre[] = {2, 4, 1}  Output: false  Given array cannot represent preorder traversal  of a Binary Search Tree.    Input:  pre[] = {40, 30, 35, 80, 100}  Output: true  Given array can represent preorder traversal  of below tree       40     /   \   30    80     \      \    35     100       Input:  pre[] = {40, 30, 35, 20, 80, 100}  Output: false  Given array cannot represent preorder traversal  of a Binary Search Tree.  

We strongly recommend you to minimize your browser and try this yourself first.

A Simple Solution is to do following for every node pre[i] starting from first one.

1) Find the first greater value on right side of current node.      Let the index of this node be j. Return true if following      conditions hold. Else return false      (i)  All values after the above found greater value are            greater than current node.      (ii) Recursive calls for the subarrays pre[i+1..j-1] and            pre[j+1..n-1] also return true. 

Time Complexity of the above solution is O(n2)

An Efficient Solution can solve this problem in O(n) time. The idea is to use a stack. This problem is similar to Next (or closest) Greater Element problem. Here we find next greater element and after finding next greater, if we find a smaller element, then return false.

1) Create an empty stack.  2) Initialize root as INT_MIN.  3) Do following for every element pre[i]       a) If pre[i] is greater than current root, return false.       b) Keep removing elements from stack while pre[i] is greater          then stack top. Make the last removed item as new root (to          be compared next).          At this point, pre[i] is greater than the removed root          (That is why if we see a smaller element in step a), we           return false)       c) push pre[i] to stack (All elements in stack are in decreasing          order)  

Read full article from Check if a given array can represent Preorder Traversal of Binary Search Tree - GeeksforGeeks


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts