摘要:注意你不能對兩棵二叉樹,以及節點進行更改。只能返回對克隆樹中已有的節點的引用。答案是樹中的黃顏色的節點其他示例類似。樣例輸入輸出樣例輸入輸出樣例輸入輸出樣例輸入輸出提示樹中節點的數量范圍為。同一棵樹中,沒有值相同的節點。
非常感謝你閱讀本文~
歡迎【?點贊】【?收藏】【?評論】~
放棄不難,但堅持一定很酷~
希望我們大家都能每天進步一點點~
本文由 二當家的白帽子: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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/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); 前言...
閱讀 3060·2021-11-18 10:02
閱讀 3327·2021-11-02 14:48
閱讀 3391·2019-08-30 13:52
閱讀 554·2019-08-29 17:10
閱讀 2082·2019-08-29 12:53
閱讀 1402·2019-08-29 12:53
閱讀 1026·2019-08-29 12:25
閱讀 2163·2019-08-29 12:17