解法一:广度优先搜索
提示中说明了树中没有两个结点有相同的值,那么找相同结点其实就是遍历并且比较结点的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);}}}
