LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給定一個有 N 個節點的二叉樹,每個節點都有一個不同于其他節點且處于 {1, …, N} 中的值。
通過交換節點的左子節點和右子節點,可以翻轉該二叉樹中的節點。
考慮從根節點開始的先序遍歷報告的 N 值序列。將這一 N 值序列稱為樹的行程。
(回想一下,節點的先序遍歷意味著我們報告當前節點的值,然后先序遍歷左子節點,再先序遍歷右子節點。)
我們的目標是翻轉最少的樹中節點,以便樹的行程與給定的行程 voyage 相匹配。
如果可以,則返回翻轉的所有節點的值的列表。你可以按任何順序返回答案。
如果不能,則返回列表 [-1]。
示例 1:
示例 2:
示例 3:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/flip-binary-tree-to-match-preorder-traversal
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 邊先序遍歷,邊調換左右子樹節點
8 ms 13.3 MB
python3 解答
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution: # py3def __init__(self):self.i = 0self.can = Trueself.ans = []def flipMatchVoyage(self, root: TreeNode, voyage: List[int]) -> List[int]:def dfs(root, voyage):if not self.can or not root:returnif root.val == voyage[self.i]:self.i += 1if root.left and root.left.val == voyage[self.i]:dfs(root.left,voyage)dfs(root.right, voyage)elif root.right and root.right.val == voyage[self.i]:if root.left:self.ans.append(root.val)dfs(root.right, voyage)dfs(root.left, voyage)elif root.left or root.right:self.can = Falseelse:self.can = Falsedfs(root, voyage)if not self.can:return [-1]return self.ans40 ms 13.7 MB
總結
以上是生活随笔為你收集整理的LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 824. 山羊拉丁文
- 下一篇: LeetCode 987. 二叉树的垂序