Modified Lowest Common Ancestor | CODING INTERVIEW ARCHIVES



Modified Lowest Common Ancestor | CODING INTERVIEW ARCHIVES

The lowest common ancestor(LCA) between two nodes a and b is defined as the lowest node in tree T that has both a and b as descendants (where we allow a node to be a descendant of itself).
The problem here is to find the LCA of 2 nodes, in such a way that a given node is not allowed to be a descendant of itself. Hence, if any of the 2 nodes is the root of the tree then the LCA does not exist.

Approach:
To find the LCA, we follow a recursive approach. If the root has value equal to any of a or b, we return the root.
We recursively find the nodes in the left subtree and the right subtree.
If both the subtree respectively have 1 of the 2 given nodes, we return the root.
Else, if any one of the 2 return values is not NULL, return that value (It means atleast 1 of the nodes is found in that tree).
Else, return NULL (It means none of the 2 nodes is found in the subtrees).
The base case is to return NULL for a NULL root.

Now, for the modified LCA problem, instead of checking the value of root to be equal to one of the given values a or b, we check if any of the value a or b is equal to the value of any of the 2 child of root node.
This is done only if the corresponding child of the root exists. Thus, the base case can be to return NULL if none of the child exists(i.e. the root is a leaf).
Other conditions and the code remains the same.

Read full article from Modified Lowest Common Ancestor | CODING INTERVIEW ARCHIVES


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