Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク
2つの二分木の根が与えられた場合 根 そして サブルート、 戻る 真実 のサブツリーがある場合 根 同じ構造とノード値を持つ サブルート そして 間違い さもないと。
二分木のサブツリー 木 は、ノードで構成されるツリーです。 木 そしてこのノードのすべての子孫。木 木 それ自体のサブツリーと見なすこともできます。
例 1:

入力: ルート = [3,4,5,1,2]、サブルート = [4,1,2] 出力: 真実
例 2:

入力: ルート = [3,4,5,1,2,null,null,null,null,0]、サブルート = [4,1,2] 出力: 間違い
制約:
- ノードの数は
根木は範囲内にある[1, 2000]. - ノードの数は
サブルート木は範囲内にある[1, 1000]. -10 4 <= ルート値 <= 10 4-10 4 <= サブルート値 <= 10 4
パイソン
#時間計算量: O(m*n) #空間計算量: O(m+n) 入力から OptionalクラスTreeNodeをインポート: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right クラス 解決法: def isSameTree(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool: root1でもroot2でもない場合は: Trueを返す root1でもroot2でもない場合は: Falseを返す root1.val != root2.valの場合は: Falseを返す self.isSameTree(root1.left, root2.left)かつself.isSameTree(root1.right, root2.right)を返す def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: def dfs(node): ノードがなし: False を返します elif self.isSameTree(node, subRoot): True を返します return dfs(node.left) または dfs(node.right) return dfs(root) root = TreeNode(3) root.left = TreeNode(4) root.left.left = TreeNode(1) root.left.right = TreeNode(2) root.right = TreeNode(5) subRoot = TreeNode(4) subRoot.left = TreeNode(1) subRoot.right = TreeNode(2) print(Solution().isSubtree(root, subRoot))

![[Leetcode] 0105. 先行順序と中順序の走査から二分木を構築する](https://hogantechs.com/wp-content/uploads/2025/03/9-1024x577.jpg)