思路一:广度优先搜索:时间效率有点低。
class Solution {
public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {
// 题目限定条件:同一棵树中没有相同的结点
// 我采用广度优先遍历。bfs
if(original == target) return cloned;
Queue<TreeNode> queue1 = new LinkedList<>();
Queue<TreeNode> queue2 = new LinkedList<>();
queue1.add(original);
queue2.add(cloned);
while(!queue1.isEmpty()){
TreeNode tmp = queue1.remove();
TreeNode tmp2 = queue2.remove();
if(tmp.left != null){
if(tmp.left == target) return tmp2.left;
queue1.add(tmp.left);
queue2.add(tmp2.left);
}
if(tmp.right != null){
if(tmp.right == target) return tmp2.right;
queue1.add(tmp.right);
queue2.add(tmp2.right);
}
}
return null;
}
}
思路二:递归的方法:
class Solution {
public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {
// 用递归的方式进行解题
if(original == null) return null;
if(original == target) return cloned;
TreeNode tmp = null;
if((tmp = getTargetCopy(original.left,cloned.left,target))!=null){
return tmp;
}
return getTargetCopy(original.right,cloned.right,target);
}
}