こんにちは
今回の学びは
・
問題は。。。
(時間配分は5分問題理解 10分検討 10分実装 20分振り返り の一文45分構成)
まずは入出力をしっかりおさえましょう。
はじめて
と直接コーディングにかかりました。
easy とうことで
解けるだろう
と希望的観測も含めつつ。
ちょっと考えるが結構難しい。
一個づつdfsしていってその地点からsubtreeと同じか?というのを
ひらたすらくりかえす O(s * t)というアルゴリズム。
ブルートフォースにあたるとおもうが、他に思いつかないし
easyだし通るだろうとうことで実装。
実装後です。timespace analysis (時間とスペースの分析)は ◯◯
class Solution: def isSubtree(self, s: TreeNode, t: TreeNode) -> bool: def is_same_tree(a: TreeNode, b: TreeNode): if a == None and b == None: return True if a is None and b: return False if b is None and a: return False if a.val == b.val: return is_same_tree(a.left, b.left) and is_same_tree(a.right, b.right) else: return False def dfs(node: TreeNode): if is_same_tree(node, t): return True if node.left: if dfs(node.left): return True if node.right: if dfs(node.right): return True return False return dfs(s)
コンパクトにかける模様 -> https://leetcode.com/problems/subtree-of-another-tree/discuss/370293/python-recursive-1-function-5-lines
サイズをつかって無駄をなくして、いわゆる枝刈りにあたるのかな。O(2S + T)とのこと。-> https://leetcode.com/problems/subtree-of-another-tree/discuss/367070/Different-approach-incredibly-simple-O(S-%2B-T)-solution.
まとめ
以上です