/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

class Solution {
    public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {
        
		// Queue to store original treenodes
        Queue<TreeNode> queue_original = new LinkedList<>();
        queue_original.offer(original);
        
		// Queue to store cloned treenodes
        Queue<TreeNode> queue_target = new LinkedList<>();
        queue_target.offer(cloned);
        
        while(!queue_original.isEmpty()){
            
			// Extract the node from both the queues 
            TreeNode node_o = queue_original.poll();
            TreeNode node_t = queue_target.poll();
            
			// Check for result
            if(node_o == target)
                return node_t;
            
			// If not traverse left for both the nodes & add in queue
            if(node_o.left != null){
                queue_original.offer(node_o.left);
                queue_target.offer(node_t.left);
            }
            
			// Similarly, repeat for right as well & add in queue
            if(node_o.right != null){
                queue_original.offer(node_o.right);
                queue_target.offer(node_t.right);
            }
        }
        return null;
    }
}
Comments (0)