LeetCode 1379.找出克隆二叉树中的相同节点:二叉树遍历

【LetMeFly】1379.找出克隆二叉树中的相同节点:二叉树遍历

力扣题目链接:https://leetcode.cn/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/

给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target

其中,克隆树 cloned 是原始树 original 的一个 副本

请找出在树 cloned 中,与 target 相同 的节点,并返回对该节点的引用(在 C/C++ 等有指针的语言中返回 节点指针,其他语言返回节点本身)。

 

注意:不能 对两棵二叉树,以及 target 节点进行更改。只能 返回对克隆树 cloned 中已有的节点的引用。

     

      示例 1:

      输入: tree = [7,4,3,null,null,6,19], target = 3
      输出: 3
      解释: 上图画出了树 original 和 cloned。target 节点在树 original 中,用绿色标记。答案是树 cloned 中的黄颜色的节点(其他示例类似)。

      示例 2:

      输入: tree = [7], target =  7
      输出: 7
      

      示例 3:

      输入: tree = [8,null,6,null,5,null,4,null,3,null,2,null,1], target = 4
      输出: 4
      

       

      提示:

      • 树中节点的数量范围为 [1, 104] 。
      • 同一棵树中,没有值相同的节点。
      • target 节点是树 original 中的一个节点,并且不会是 null 。

       

      进阶:如果树中允许出现值相同的节点,将如何解答?

      解题方法:二叉树遍历

      这道题根被不需要管original树,只需要按照任意的方式遍历cloned树,并在遍历的过程中判断当前节点是否和target节点相同即可。

      这里以(伪)广度优先搜索为例:

      创建一个队列,队列中初始元素为cloned树的根节点。

      之后开始不断地从队列中取出节点:

      • 如果当前节点和target的值相等,则直接返回该节点,算法结束。
      • 如果当前节点的左子节点非空,则将左子节点加入队列中。
      • 如果当前节点的右子节点非空,则将右子节点加入队列中。
      • 时间复杂度 O ( N ) O(N) O(N),其中 N N N为二叉树节点个数。
      • 空间复杂度 O ( N ) O(N) O(N)

      AC代码

      C++
      class Solution {
      public:TreeNode* getTargetCopy(TreeNode* original, TreeNode* cloned, TreeNode* target) {queue<TreeNode*> q;q.push(cloned);while (true) {  // 一定会找到TreeNode* thisNode = q.front();q.pop();if (thisNode->val == target->val) {return thisNode;}if (thisNode->left) {q.push(thisNode->left);}if (thisNode->right) {q.push(thisNode->right);}}}
      };
      
      Python
      # # Definition for a binary tree node.
      # class TreeNode:
      #     def __init__(self, x):
      #         self.val = x
      #         self.left = None
      #         self.right = Noneclass Solution:def getTargetCopy(self, original: TreeNode, cloned: TreeNode, target: TreeNode) -> TreeNode:q = [cloned]while True:thisNode = q.pop()if thisNode.val == target.val:return thisNodeif thisNode.left:q.append(thisNode.left)if thisNode.right:q.append(thisNode.right)
      

      同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
      Tisfy:https://letmefly.blog.csdn.net/article/details/137341930

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792337.shtml

      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

      相关文章

      Golang | Leetcode Golang题解之第3题无重复字符的最长子串

      题目&#xff1a; 题解&#xff1a; func lengthOfLongestSubstring(s string) int {// 哈希集合&#xff0c;记录每个字符是否出现过m : map[byte]int{}n : len(s)// 右指针&#xff0c;初始值为 -1&#xff0c;相当于我们在字符串的左边界的左侧&#xff0c;还没有开始移动r…

      Linux初学(十二)AWK进阶

      一、AWK 1.1 简介 AWK是Linux中重要的文本处理工具Linux三剑客只一处理的对象可以是一个具体的文件&#xff0c;也可以是一个命令的执行结果AWK按行读取文件&#xff0c;将每一行视为一条记录 案例一&#xff1a;获取系统中每个用户的uid 方法一&#xff1a;cat /etc/passwd |…

      vue3+threejs新手从零开发卡牌游戏(二十五):尾声(附完整源码下载地址)

      这个demo到这里就算接近尾声了&#xff0c;大体的游戏框架就算搭建完成了&#xff0c;主要是提供了一下思路&#xff0c;代码也是来来回回修改了好几次&#xff0c;也踩了一些坑&#xff0c;后续可以自行优化一些战斗效果和交互逻辑、UI美化等&#xff0c;这里附上源码下载链接…

      CMD 命令行进入到电脑硬盘的某个目录的几种方式

      本文介绍几种 cmd 命令行进入到电脑硬盘的某个目录的几种方式。 1、在具体文件目录地址栏输入 cmd 回车 这是最快的、最牛的方式&#xff0c;没有之一。 比如&#xff1a;我想进入一个层级很深的文件目录&#xff0c;直接打开在那个目录&#xff0c;把地址栏信息删除清空&am…

      FLink学习(三)-DataStream

      一、DataStream 1&#xff0c;支持序列化的类型有 基本类型&#xff0c;即 String、Long、Integer、Boolean、Array复合类型&#xff1a;Tuples、POJOs 和 Scala case classes Tuples Flink 自带有 Tuple0 到 Tuple25 类型 Tuple2<String, Integer> person Tuple2.…

      【C++进阶】带你手撕红黑树(红与黑的爱恨厮杀)

      &#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 引言&#xff1a; 之前我们…

      『大模型笔记』LLMs入门:不涉及太多数学和术语的LLMs基本原理通俗讲解

      LLMs入门:不涉及太多数学和术语的LLMs基本原理通俗讲解 文章目录 一. 词向量(Word vectors)二. 词义取决于上下文(Word meaning depends on context)三. 将词向量转化为词语预测(Transforming word vectors into word predictions)四. 请问我能吸引你的注意力吗(Can I have yo…

      vivado 串行矢量格式 (SVF) 文件编程

      串行矢量格式 (SVF) 文件编程 注释 &#xff1a; 串行矢量格式 (SVF) 编程在 Versal ™ 器件上不受支持。 对 FPGA 和配置存储器器件进行编程的另一种方法是通过使用串行矢量格式 (SVF) 文件来执行编程。通过 Vivado Design Suite 和 Vivado Lab Edition 生成的 SVF …

      八数码(bfs做法)非常详细,适合新手服用

      题目描述&#xff1a; 在一个 33 的网格中&#xff0c;1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一的数字交换&#xff08;如果存在&#xff09;。 我…

      JS-11A/11时间继电器 板前接线 JOSEF约瑟

      系列型号&#xff1a; JS-11A/11集成电路时间继电器&#xff1b;JS-11A/12集成电路时间继电器&#xff1b; JS-11A/13集成电路时间继电器&#xff1b;JS-11A/136集成电路时间继电器&#xff1b; JS-11A/137集成电路时间继电器&#xff1b;JS-11A/22集成电路时间继电器&#…

      Folder Icons for Mac v1.8 激活版文件夹个性化图标修改软件

      Folder Icons for Mac是一款Mac OS平台上的文件夹图标修改软件&#xff0c;同时也是一款非常有意思的系统美化软件。这款软件的主要功能是可以将Mac的默认文件夹图标更改为非常漂亮有趣的个性化图标。 软件下载&#xff1a;Folder Icons for Mac v1.8 激活版 以下是这款软件的一…

      方格画(C/C++)

      理解题意 ZZX学长在正因街买了一个白色的方格画板, 他想把画板固定在墙上绘画. 白色画板不能转动, 画板上有nn的网格, ZZX可以选择任意多行及任意多列的格子涂成黑色(选择的整行, 列均需涂成黑色), 所选行数, 列数均可为0. ZZX希望最终的成品上需要有k个黑色格子, 请告诉ZZX共…

      day17-分配问题

      题目描述 每个孩子最多只能给一块饼干。对每个孩子 i&#xff0c;都有一个胃口值 children[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸 cookies[j] 。如果 cookies[j] > children[i]&#xff0c;我们可以将…

      亚马逊自动养号软件新手必读:养号过程中的关键注意事项

      亚马逊买家号想要养号效果好&#xff0c;需要重点注意以下4点: 1、前期的准备工作:确保账号登陆的环境是安全的&#xff0c;最好就是用的家庭IP。然后是FBA收货 地址&#xff0c;固定的收货地址有利于账号的安全稳定性&#xff0c;还有一个就是确定安全的成交付款方式&#xf…

      opencv-python库 cv2边界填充resize图片

      文章目录 边界填充改变图片大小 边界填充 在OpenCV中&#xff0c;边界填充&#xff08;Border Padding&#xff09;是指在图像周围添加额外的像素&#xff0c;以扩展图像的尺寸或满足某些算法&#xff08;如卷积&#xff09;的要求。OpenCV提供了cv2.copyMakeBorder()函数来进…

      网络协议栈--数据链路层

      目录 对比理解“数据链路层”和“网络层”一、认识以太网1.1 以太网帧格式1.2 认识MAC地址1.3 对比理解MAC地址和IP地址1.4 认识MTU1.5 MTU对IP协议的影响1.6 MTU对UDP协议的影响1.7 MTU对于TCP协议的影响1.8 查看硬件地址和MTU 二、ARP协议2.1 ARP协议的作用2.2 ARP协议的工作…

      Springboot传参要求

      传参的参数名称必须与Set方法的参数名字相同 &#xff0c;不然会报错。

      TS小记--

      Ts学习 npm init -y -y所有问题都选yes 创建package.json文件 安装ts&#xff1a; npm i typescript -g -g全局安装&#xff0c;保证每个地方都可以使用 创建ts配置文件&#xff1a;tsconfig.json tsc -init 执行ts文件&#xff1a; tsc ./src/index.ts 导入webpac包&am…

      MacBook安装使用XMind

      MacBook安装使用XMind XMind简介 官方地址: https://www.xmind.cn/ XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生。作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐。 XMind 是一款非常实用的商业思维导图软件&#xff0c;应用…

      我认识的Git-史上最强的版本控制系统

      大家好&#xff01; 欢迎大家来一起交流Git使用心得&#xff0c;相信很多同事对Git都很熟悉了&#xff0c;如果下面说的有错误的“知识点”&#xff0c;欢迎批评指正。 初识Git 我认识Git已经很多年了&#xff08;我在有道云笔记里面“Git”文件夹的创建时间是&#xff1a; …