[リートコード] 0572. 別のツリーのサブツリー

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))
				
			
ja日本語