摘要:注意你不能對兩棵二叉樹,以及節(jié)點進行更改。只能返回對克隆樹中已有的節(jié)點的引用。答案是樹中的黃顏色的節(jié)點其他示例類似。樣例輸入輸出樣例輸入輸出樣例輸入輸出樣例輸入輸出提示樹中節(jié)點的數(shù)量范圍為。同一棵樹中,沒有值相同的節(jié)點。
非常感謝你閱讀本文~
歡迎【?點贊】【?收藏】【?評論】~
放棄不難,但堅持一定很酷~
希望我們大家都能每天進步一點點~
本文由 二當家的白帽子:https://le-yi.blog.csdn.net/ 博客原創(chuàng)~
給你兩棵二叉樹,原始樹 original
和克隆樹 cloned
,以及一個位于原始樹 original
中的目標節(jié)點 target
。
其中,克隆樹 cloned
是原始樹 original
的一個 副本 。
請找出在樹 cloned
中,與 target
相同 的節(jié)點,并返回對該節(jié)點的引用(在 C/C++ 等有指針的語言中返回 節(jié)點指針,其他語言返回節(jié)點本身)。
target
節(jié)點進行更改。cloned
中已有的節(jié)點的引用。進階:如果樹中允許出現(xiàn)值相同的節(jié)點,你將如何解答?
輸入: tree = [7,4,3,null,null,6,19], target = 3 輸出: 3 解釋: 上圖畫出了樹 original 和 cloned。target 節(jié)點在樹 original 中,用綠色標記。答案是樹 cloned 中的黃顏色的節(jié)點(其他示例類似)。
輸入: 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
節(jié)點是樹 original
中的一個節(jié)點,并且不會是 null
。original
是原樹;第二個參數(shù) cloned
是第一個參數(shù)的克隆拷貝;第三個參數(shù) target
是我們要找到的節(jié)點,它是第一個參數(shù) original
中的一個節(jié)點,需要找到并返回第二個參數(shù) cloned
里對應(yīng)的節(jié)點。cloned
,直到找到和第三個參數(shù) target
值相同的節(jié)點并返回就可以了。original
,因為第三個參數(shù) target
是原樹中的一個節(jié)點,所以我們可以直接根據(jù)地址判斷是否是相同節(jié)點。cloned
是第一個參數(shù)的克隆拷貝,所以它們具有相同結(jié)構(gòu),我們只要按照相同順序同時遍歷原樹和克隆樹,就可以找到答案。非遞歸遍歷
/** * 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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123744.html
摘要:題目描述給定一個二叉樹和其中的一個結(jié)點,請找出中序遍歷順序的下一個結(jié)點并且返回。分析對于二叉樹中序遍歷來說,某的下一個節(jié)點可以分為以下幾種情況不為時,根據(jù)中序遍歷的定義,下一個節(jié)點則是右子樹里最左邊的節(jié)點。 題目描述 給定一個二叉樹和其中的一個結(jié)點,請找出中序遍歷順序的下一個結(jié)點并且返回。注意,樹中的結(jié)點不僅包含左右子結(jié)點,同時包含指向父結(jié)點的指針。 分析 對于二叉樹中序遍歷來說,某n...
摘要:在數(shù)據(jù)結(jié)構(gòu)領(lǐng)域?qū)?yīng)樹結(jié)構(gòu)來說二叉樹是最常用的一種樹結(jié)構(gòu),二叉樹具有一個唯一的根節(jié)點,也就是最上面的節(jié)點。二叉樹每個節(jié)點最多有兩個孩子,一個孩子都沒有的節(jié)點通常稱之為葉子節(jié)點,二叉樹每個節(jié)點最多有一個父親,根節(jié)點是沒有父親節(jié)點的。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言...
摘要:在數(shù)據(jù)結(jié)構(gòu)領(lǐng)域?qū)?yīng)樹結(jié)構(gòu)來說二叉樹是最常用的一種樹結(jié)構(gòu),二叉樹具有一個唯一的根節(jié)點,也就是最上面的節(jié)點。二叉樹每個節(jié)點最多有兩個孩子,一個孩子都沒有的節(jié)點通常稱之為葉子節(jié)點,二叉樹每個節(jié)點最多有一個父親,根節(jié)點是沒有父親節(jié)點的。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言...
摘要:概念二叉樹是另一種樹型結(jié)構(gòu),它的特點是每個結(jié)點至多只有兩棵子樹即二叉樹中不存在度大于的結(jié)點,并且,二叉樹的子樹有左右之分其次序不能任意顛倒。查找最大值查找最小值思路傳入二叉樹,尋找左子樹,直到找到不存在左子樹的節(jié)點。 概念 二叉樹(Binary Tree)是另一種樹型結(jié)構(gòu),它的特點是每個結(jié)點至多只有兩棵子樹(即二叉樹中不存在度大于 2 的結(jié)點),并且,二叉樹的子樹有左右之分(其次序不能...
閱讀 3049·2021-11-18 10:02
閱讀 3315·2021-11-02 14:48
閱讀 3383·2019-08-30 13:52
閱讀 526·2019-08-29 17:10
閱讀 2070·2019-08-29 12:53
閱讀 1392·2019-08-29 12:53
閱讀 1017·2019-08-29 12:25
閱讀 2154·2019-08-29 12:17