Check if leaf traversal of two Binary Trees is same? - GeeksforGeeks



Check if leaf traversal of two Binary Trees is same? - GeeksforGeeks

Leaf traversal is sequence of leaves traversed from left to right. The problem is to check if leaf traversals of two given Binary Trees are same or not.

Expected time complexity O(n). Expected auxiliary space O(h1 + h2) where h1 and h2 are heights of two Binary Trees.

Examples:

Input: Roots of below Binary Trees           1              	/ \         2   3              /   / \		         4   6   7    	 0  	/  \         5    8	            \  / \		          4  6  7  Output: same  Leaf order traversal of both trees is 4 6 7	     Input: Roots of below Binary Trees           0              	/ \         1   2               / \   	       8   9       	 1  	/ \         4   3	           \ / \		          8 2  9    Output: Not Same  Leaf traversals of two trees are different.  For first, it is 8 9 2 and for second it is  8 2 9

We strongly recommend you to minimize your browser and try this yourself first.
A Simple Solution is traverse first tree and store leaves from left and right in an array. Then traverse other tree and store leaves in another array. Finally compare two arrays. If both arrays are same, then return true.

The above solution requires O(m+n) extra space where m and n are nodes in first and second tree respectively.

How to check with O(h1 + h2) space?
The idea is use iterative traversal. Traverse both trees simultaneously, look for a leaf node in both trees and compare the found leaves. All leaves must match.

Algorithm:

1. Create empty stacks stack1 and stack2      for iterative traversals of tree1 and tree2    2. insert (root of tree1) in stack1     insert (root of tree2) in stack2    3. Stores current leaf nodes of tree1 and tree2  temp1 = (root of tree1)   temp2 = (root of tree2)      4. Traverse both trees using stacks  while (stack1 and stack2 parent empty)   {      // Means excess leaves in one tree      if (if one of the stacks are empty)     	return false       // get next leaf node in tree1      temp1 = stack1.pop()     while (temp1 is not leaf node)      {          push right child to stack1       	push left child to stack1     }       // get next leaf node in tree2          temp2 = stack2.pop()     while (temp2 is not leaf node)      {          push right child to stack2        	push left child to stack2     }       // If leaves do not match return false     if (temp1 != temp2)                           return false  }    5. If all leaves matched, return true  


Read full article from Check if leaf traversal of two Binary Trees is same? - 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