Pythonで葉のシーケンスが2つの葉と同じであるかどうかを確認するプログラム
2つの二分木があるとします。両方の木の左から右への葉の順序が同じであるかどうかを確認する必要があります。
したがって、入力が次のような場合
両方のツリーのシーケンスが[2、6]であるため、出力はTrueになります。
これを解決するには、次の手順に従います。
- c:=新しいリスト
- 関数inorder()を定義します。これが定着し、c
- cがnullの場合、
- c:=新しいリスト
- rootがnullでない場合、
- 順序(ルートの左側、c)
- ルートの左側がnullで、ルートの右側がnullの場合、
- cの最後にrootの値を挿入
- 順序(ルートの権利、c)
- return c
- メインの方法から、次の手順を実行します。
- inorder(root0)がinorder(root1)と同じ場合、
- Trueを返す
- それ以外の場合、
- Falseを返す
理解を深めるために、次の実装を見てみましょう。
例
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: c = [] def inorder(self, root, c=None): if c is None: c = [] if root: self.inorder(root.left, c) if not root.left and not root.right: c.append(root.val) self.inorder(root.right, c) return c def solve(self, root0, root1): if self.inorder(root0) == self.inorder(root1): return True else: return False ob = Solution() root1 = TreeNode(1) root1.right = TreeNode(3) root1.right.left = TreeNode(2) root1.right.right = TreeNode(6) root2 = TreeNode(1) root2.left = TreeNode(3) root2.right = TreeNode(6) root2.left.left = TreeNode(2) print(ob.solve(root1, root2))
入力
root1 = TreeNode(1) root1.right = TreeNode(3)root1.right.left = TreeNode(2)
root1.right.right = TreeNode(6)
root2 = TreeNode(1)
root2.left = TreeNode(3)
root2.right = TreeNode(6)root2.left.left = TreeNode(2)
出力
True
-
Pythonで隣接するノードが同じ色を持たないツリーに色を付けることができるかどうかを確認するプログラム
各ノードの値がその色を表す二分木があるとします。木にはせいぜい2色しかありません。接続されている2つのノードが同じ色にならないように、ノードの色を何度でも交換できるかどうかを確認する必要があります。 したがって、入力が次のような場合 そうすれば、出力はTrueになります これを解決するには、次の手順に従います- 色:=空の地図 prop:=空のマップ 関数dfs()を定義します。これはノードを取り、フラグを立てます ノードがnullの場合、 戻る 色[ノードの値]:=色[ノードの値] + 1 prop [flag]:=prop [flag] + 1 dfs(
-
与えられたグラフがPythonで2部グラフであるかどうかをチェックするプログラム
無向グラフが1つあるとすると、グラフが2部グラフであるかどうかを確認する必要があります。グラフのすべてのエッジ{u、v}がAに1つのノードuを持ち、Bに別のノードvを持つように、グラフのノードを2つのセットAとBに分割できる場合、グラフは2部グラフであることがわかります。 したがって、入力が次のような場合 次に、出力はTrueになり、[0,4]はセットAにあり、[1,2,3]はセットBにあり、すべてのエッジはAからAまたはBからBではなく、AからBまたはBからAになります。 。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはソースを取ります