找出克隆二叉树的相同节点

本文介绍了在LeetCode题目中,如何通过层次遍历法和递归深度优先遍历来寻找克隆二叉树中的相同节点,分别利用队列和递归数据结构解决问题。
摘要由CSDN通过智能技术生成

题目链接: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);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值