题目
1379. 找出克隆二叉树中的相同节点
分析
这道题目其实利用的是递归的思想,同时遍历两棵树即可。具体流程(下面所讲解的流程基于的前提一定是两棵树一起遍历哦):
- 如果
original
为空节点,直接返回null
; - 如果
original == target
,说明我们找到了对应的节点,直接返回cloned
; - 没找到的话,递归遍历左子树,即执行
getTargetCopy(original.left,cloned.left,target)
,如果有返回值,代表左子树找到了,直接返回找到的值,右子树不用遍历了。 - 左子树没找到,遍历右子树,即执行
getTargetCopy(original.right,cloned.right,target)
,如果有返回值,代表右子树找到了,直接返回找到的值。 - 否则,左右子树都没找到 且 original != target,直接返回 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(original == null) return null;if(original == target) {return cloned;}TreeNode left = getTargetCopy(original.left,cloned.left,target);if(left != null) {return left;}TreeNode right = getTargetCopy(original.right,cloned.right,target);if(right != null) {return right;}return null;}
}