/**
* 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;
}
}