摘要:注意你不能对两棵二叉树,以及节点进行更改。只能返回对克隆树中已有的节点的引用。答案是树中的黄颜色的节点其他示例类似。样例输入输出样例输入输出样例输入输出样例输入输出提示树中节点的数量范围为。同一棵树中,没有值相同的节点。
非常感谢你阅读本文~
欢迎【?点赞】【⭐收藏】【?评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
给你两棵二叉树,原始树 original
和克隆树 cloned
,以及一个位于原始树 original
中的目标节点 target
。
其中,克隆树 cloned
是原始树 original
的一个 副本 。
请找出在树 cloned
中,与 target
相同 的节点,并返回对该节点的引用(在 C/C++ 等有指针的语言中返回 节点指针,其他语言返回节点本身)。
target
节点进行更改。cloned
中已有的节点的引用。进阶:如果树中允许出现值相同的节点,你将如何解答?
输入: tree = [7,4,3,null,null,6,19], target = 3 输出: 3 解释: 上图画出了树 original 和 cloned。target 节点在树 original 中,用绿色标记。答案是树 cloned 中的黄颜色的节点(其他示例类似)。
输入: tree = [7], target = 7 输出: 7
输入: tree = [8,null,6,null,5,null,4,null,3,null,2,null,1], target = 4 输出: 4
输入: tree = [1,2,3,4,5,6,7,8,9,10], target = 5 输出: 5
输入: tree = [1,2,null,3], target = 2 输出: 2
target
节点是树 original
中的一个节点,并且不会是 null
。original
是原树;第二个参数 cloned
是第一个参数的克隆拷贝;第三个参数 target
是我们要找到的节点,它是第一个参数 original
中的一个节点,需要找到并返回第二个参数 cloned
里对应的节点。cloned
,直到找到和第三个参数 target
值相同的节点并返回就可以了。original
,因为第三个参数 target
是原树中的一个节点,所以我们可以直接根据地址判断是否是相同节点。cloned
是第一个参数的克隆拷贝,所以它们具有相同结构,我们只要按照相同顺序同时遍历原树和克隆树,就可以找到答案。非递归遍历
/** * 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) { Deque<TreeNode> stack = new LinkedList<>(); TreeNode node = original; TreeNode clonedNode = cloned; while (node != null || !stack.isEmpty()) { if (node != null) { if (node == target) { return clonedNode; } stack.push(clonedNode); stack.push(node); node = node.left; clonedNode = clonedNode.left; } else { node = stack.pop().right; clonedNode = stack.pop().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 || original == target) { return cloned; } TreeNode ans = getTargetCopy(original.left, cloned.left, target); if (ans == null) { ans = getTargetCopy(original.right, cloned.right, target); } return ans; }}
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* getTargetCopy(TreeNode* original, TreeNode* cloned, TreeNode* target) { if (cloned == nullptr || original == target) { return cloned; } TreeNode* ans = getTargetCopy(original->left, cloned->left, target); if (ans == nullptr) { ans = getTargetCopy(original->right, cloned->right, target); } return ans; }};
# 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: if cloned is None or original == target: return cloned ans = self.getTargetCopy(original.left, cloned.left, target) if ans is None: ans = self.getTargetCopy(original.right, cloned.right, target) return ans
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/123744.html
摘要:题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。分析对于二叉树中序遍历来说,某的下一个节点可以分为以下几种情况不为时,根据中序遍历的定义,下一个节点则是右子树里最左边的节点。 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 分析 对于二叉树中序遍历来说,某n...
摘要:在数据结构领域对应树结构来说二叉树是最常用的一种树结构,二叉树具有一个唯一的根节点,也就是最上面的节点。二叉树每个节点最多有两个孩子,一个孩子都没有的节点通常称之为叶子节点,二叉树每个节点最多有一个父亲,根节点是没有父亲节点的。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言...
摘要:在数据结构领域对应树结构来说二叉树是最常用的一种树结构,二叉树具有一个唯一的根节点,也就是最上面的节点。二叉树每个节点最多有两个孩子,一个孩子都没有的节点通常称之为叶子节点,二叉树每个节点最多有一个父亲,根节点是没有父亲节点的。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言...
阅读 3029·2021-11-18 10:02
阅读 3295·2021-11-02 14:48
阅读 3351·2019-08-30 13:52
阅读 509·2019-08-29 17:10
阅读 2055·2019-08-29 12:53
阅读 1360·2019-08-29 12:53
阅读 984·2019-08-29 12:25
阅读 2110·2019-08-29 12:17