Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク
二分木の場合 Tを定義することができます 反転操作 次のように、任意のノードを選択し、左と右の子サブツリーを交換します。
バイナリツリー バツ は 同等の反転 バイナリツリーに はい もし私たちが バツ 等しい はい 何度か反転操作を行った後。
2つの二分木の根が与えられた場合 ルート1
そして ルート2
、 戻る 真実
2つの木が反転等価であるか、 間違い
さもないと。
例 1:
入力: ルート1 = [1,2,3,4,5,6,null,null,null,7,8]、ルート2 = [1,3,2,null,6,4,5,null,null,null,null,8,7] 出力: 真実 説明: 値が1、3、5のノードで反転しました。
例 2:
入力: ルート1 = []、ルート2 = [] 出力: 真実
例 3:
入力: ルート1 = []、ルート2 = [1] 出力: 間違い
制約:
- 各ツリーのノード数の範囲は
[0, 100]
. - それぞれの木には 一意のノード値 範囲内
[0, 99]
.
パイソン
# 時間計算量: O(n) # 空間計算量: O(n) 入力から Optional をインポートします。クラス TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def traverse(node): if node is None: return if node.val: print(node.val) if node.left: traverse(node.left) if node.right: traverse(node.right) クラス ソリューション: def flipEquiv(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool: if not root1 and not root2: return True if not root1 or not root2: return False if root1.val != root2.val: return False return (self.flipEquiv(root1.left, root2.left) and self.flipEquiv(root1.right, root2.right)) or (self.flipEquiv(root1.left, root2.right) および self.flipEquiv(root1.right, root2.left)) root1 = TreeNode(1) root1.left = TreeNode(2) root1.right = TreeNode(3) root1.left.left = TreeNode(4) root1.left.right = TreeNode(5) root1.right.left = TreeNode(6) root1.left.right.left = TreeNode(7) root1.left.right.right = TreeNode(8) root2 = TreeNode(1) root2.left = TreeNode(3) root2.right = TreeNode(2) root2.left.right = TreeNode(6) root2.right.left = TreeNode(4) root2.right.right = TreeNode(5) root2.right.right.left = TreeNode(8) root2.right.right.right = TreeNode(7) print(Solution().flipEquiv(root1, root2))