Pythonで隣接するノードが同じ色を持たないツリーに色を付けることができるかどうかを確認するプログラム
各ノードの値がその色を表す二分木があるとします。木にはせいぜい2色しかありません。接続されている2つのノードが同じ色にならないように、ノードの色を何度でも交換できるかどうかを確認する必要があります。
したがって、入力が次のような場合
そうすれば、出力はTrueになります
これを解決するには、次の手順に従います-
- 色:=空の地図
- prop:=空のマップ
- 関数dfs()を定義します。これはノードを取り、フラグを立てます
- ノードがnullの場合、
- 戻る
- 色[ノードの値]:=色[ノードの値] + 1
- prop [flag]:=prop [flag] + 1
- dfs(ノードの左側、フラグの逆)
- dfs(ノードの右側、フラグの逆)
- メインの方法から次の手順を実行します。
- dfs(root、true)
- 色と小道具のすべての要素が同じ場合はtrueを返し、それ以外の場合はfalseを返します
理解を深めるために、次の実装を見てみましょう-
例
from collections import defaultdict class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root): colors = defaultdict(int) prop = defaultdict(int) def dfs(node, flag=True): if not node: return colors[node.val] += 1 prop[flag] += 1 dfs(node.left, not flag) dfs(node.right, not flag) dfs(root) return set(colors.values()) == set(prop.values()) ob = Solution() root = TreeNode(2) root.left = TreeNode(2) root.right = TreeNode(2) root.right.left = TreeNode(1) root.right.right = TreeNode(1) root.right.left.right = TreeNode(1) print(ob.solve(root))
入力
root = TreeNode(2) root.left = TreeNode(2) root.right = TreeNode(2) root.right.left = TreeNode(1) root.right.right = TreeNode(1) root.right.left.right = TreeNode(1)
出力
True
-
Pythonで二分木がBSTであるかどうかをチェックするプログラム
二分木があるとしましょう。二分探索木かどうかを確認する必要があります。私たちが知っているように、BSTには次のプロパティがあります- 左側のサブツリーのすべてのノードが現在のノード値よりも小さい 右側のサブツリーのすべてのノードが現在のノード値よりも大きい これらのプロパティは、すべてのノードに対して再帰的に保持されます したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するには、次の手順に従います- x:=ツリー要素の順序どおりの走査シーケンスのリスト xがソートされている場合、 trueを返す falseを返す 理解を深めるために
-
Pythonで二分木が完成しているかどうかをチェックするプログラム
二分木があるとしましょう。これが完全な二分木であるかどうかを確認する必要があります。完全な二分木でわかっているように、レベルはノードで埋められますが、最後のレベルのノードと最後のレベルのすべてのノードが可能な限り左にある可能性があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するために、次の手順に従います- q:=両端キュー qの最後にルートを挿入 フラグ:=False qが空でない間、実行します temp:=qの左側から削除した後の要素 tempがnullの場合、 フラグ:=True