解法一:广度优先搜索
提示中说明了树中没有两个结点有相同的值,那么找相同结点其实就是遍历并且比较结点的val属性的过程。original结点我觉得其实完全用不到。先用深度优先搜索做一遍。
/**
* 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) {
if (cloned == null) {
return null;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(cloned);
TreeNode tmp;
while (!queue.isEmpty()) {
tmp = queue.poll();
if (tmp.val == target.val) {
return tmp;
}
if (tmp.left != null) {
queue.offer(tmp.left);
}
if (tmp.right != null) {
queue.offer(tmp.right);
}
}
return null;
}
}
解法二:深度优先搜索
看了下提交结果,似乎这道题用深搜会更快一些,用深搜也写一遍。
/**
* 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) {
if (cloned == null) {
return null;
}
if (cloned.val == target.val) {
return cloned;
}
TreeNode ans = null;
if (cloned.left != null) {
ans = getTargetCopy(original, cloned.left, target);
}
if (ans != null) {
return ans;
} else {
return getTargetCopy(original, cloned.right, target);
}
}
}