Find a Corresponding Node of a Binary Tree in a Clone of That Tree

Given two binary trees original and cloned and given a reference to a node target in the original tree.
The cloned the tree is a copy of the original tree.
Return a reference to the same node in the cloned tree.

Note that you are not allowed to change any of the two trees or the target node and the answer must be a reference to a node in the cloned tree.
Example 1:
Input: tree ={1,2,null,3}, target = 2
Output: 2

Approach

Java


public class FindCorrespondingNodeBTree {
    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        TreeNode target = root.left;
        root.left.left = new TreeNode(3);
        TreeNode cloned = root;
        TreeNode get = getTargetCopy(root, cloned, target);
        System.out.println(get.val);
    }

    private static TreeNode getTargetCopy(TreeNode original
                                TreeNode clonedTreeNode target) {
        if (original == null || cloned == null)
            return null;
        if (original == target)
            return cloned;
        TreeNode left1 = getTargetCopy(original.leftcloned.left, target);
        TreeNode right1 = getTargetCopy(original.rightcloned.right, target);
        if (left1 != null)
            return left1;
        return right1;
    }

}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {
    }

    TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int valTreeNode leftTreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}


C++

#include <bits/stdc++.h>
using namespace std;
//struct for treenode
struct TreeNode{
    int data;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int data)
    {
        this->data=data;
        this->left=NULL;
        this->right=NULL;
    }
}; 


TreeNode* getTargetCopy(TreeNode* originalTreeNode* cloned,
    TreeNode* target
{
       if(original==NULL ||cloned==NULL)
             return NULL;
      if(original==target)
            return cloned;
      TreeNode *left1=getTargetCopy(original->left,cloned->left,target);
      TreeNode *right1=getTargetCopy(original->right,cloned->right,target);
      if(left1!=NULL)
            return left1;
      return right1;
}

int main()
  TreeNode *root=new TreeNode(1);
  root->left=new TreeNode(2);

  TreeNode *target=root->left;
  root->left->left=new TreeNode(3);
  TreeNode *cloned=root;
  TreeNode *get=getTargetCopy(root,cloned,target);
  cout<<get->data;
  return 0;

}


No comments:

Post a Comment