题目链接:1379. 找出克隆二叉树中的相同节点 - 力扣(LeetCode)
思路1:采用二叉树的层次遍历法,使用到的数据结构为队列 (解决了进阶问题,树中存在值相同的节点)
class Solution {
public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {
Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
Queue<TreeNode> queueClone = new ArrayDeque<TreeNode>();
TreeNode p = original;
TreeNode q = cloned;
TreeNode temp;
queue.offer(p);
queueClone.offer(q);
while(p!=null&&!queue.isEmpty()){
p=queue.poll();
q=queueClone.poll();
if(p==target){
return q;
}
if(p.left!=null){
queue.offer(p.left);
queueClone.offer(q.left);
}
if(p.right!=null){
queue.offer(p.right);
queueClone.offer(q.right);
}
}
return null;
}
}
思路2:递归 深度优先遍历法
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 left=getTargetCopy(original.left,cloned.left,target);
if(left!=null)
return left;
return getTargetCopy(original.right,cloned.right,target);
}
}