2024.4.3
- 题目来源
- 我的题解
- 方法一 深度优先搜索
- 方法二 广度优先遍历
题目来源
力扣每日一题;题序:1379
我的题解
方法一 深度优先搜索
同时对二叉树 original 与 cloned 进行深度优先搜索,如果 original当前搜索的节点的引用等于 target 节点的引用,那么对应地返回 cloned 当前搜索的节点,否则继续对各自的左右节点同时进行搜索。
时间复杂度:O(n)
空间复杂度:O(n)
public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {if(original==null)return null;if(target.val==cloned.val)return cloned;TreeNode left=getTargetCopy(original.left,cloned.left,target);TreeNode right=getTargetCopy(original.right,cloned.right,target);return left==null?right:left;
}
方法二 广度优先遍历
使用队列同时对二叉树 original和 cloned 进行广度优先搜索,初始时分别将根节点 original 和 cloned 压入队列 q1和 q2 。假设当前搜索的节点分别为 node1与 node2,将 node1与 node2分别弹出队列,如果 node1节点的引用等于 target 节点的引用,那么返回 node2,否则将分别将 node1和 node2 的非空子节点压入队列 q1 和 q2,继续搜索过程。
时间复杂度:O(n)
空间复杂度:O(n)
public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {if(original==null)return null;Queue<TreeNode> queue=new LinkedList<>();queue.offer(cloned);while(!queue.isEmpty()){int sz=queue.size();for(int i=0;i<sz;i++){TreeNode t=queue.poll();if(target.val==t.val)return t;if(t.left!=null)queue.offer(t.left);if(t.right!=null)queue.offer(t.right);}}return null;//不可能的
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~