PythonでほぼBSTを正確なBSTにするプログラム
二分木があり、それがほぼ二分探索木であると仮定します。 2つのノードの値のみが交換されます。それを修正して、二分探索木を返す必要があります。
したがって、入力が次のような場合
その場合、出力は次のようになります
これを解決するには、次の手順に従います-
- prev_node:=null、min_node:=null、max_node:=null
- found_one:=False
- ルートを順番に走査するノードごとに、
- を実行します。
- prev_nodeがnullでない場合、
- ノードの値
- min_nodeがnullまたはノードの値
- min_node:=node
- min_nodeがnullまたはノードの値
- ノードの値
- max_nodeがnullまたはmax_nodeの値
- max_node:=prev_node
- prev_nodeがnullでない場合、
- found_oneがtrueの場合、
- ループから抜け出す
- それ以外の場合、
- found_one:=True
理解を深めるために、次の実装を見てみましょう-
例
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right def print_tree(root): if root is not None: print_tree(root.left) print(root.val, end = ', ') print_tree(root.right) def __iter__(self): if self.left: for node in self.left: yield node yield self if self.right: for node in self.right: yield node setattr(TreeNode, "__iter__", __iter__) class Solution: def solve(self, root): prev_node = None min_node = None max_node = None found_one = False for node in root: if prev_node: if node.val < prev_node.val: if min_node is None or node.val < min_node.val: min_node = node if max_node is None or max_node.val < prev_node.val: max_node = prev_node if found_one: break else: found_one = True prev_node = node min_node.val, max_node.val = max_node.val, min_node.val return root ob = Solution() root = TreeNode(3) root.left = TreeNode(6) root.right = TreeNode(8) root.right.left = TreeNode(2) root.right.right = TreeNode(9) print_tree(ob.solve(root))
入力
root = TreeNode(3) root.left = TreeNode(6) root.right = TreeNode(8) root.right.left = TreeNode(2) root.right.right = TreeNode(9)
出力
2, 3, 6, 8, 9,
-
Pythonで1つの値がBSTに存在するかどうかを確認するプログラム
二分探索木とvalという別の入力があるとすると、valがツリーに存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 val =7の場合、ツリーに7が存在するため、出力はTrueになります。 これを解決するために、次の手順に従います- 関数solve()を定義します。これはルートになります、val ルートがnullの場合、 Falseを返す ルートのデータがvalと同じ場合、 Trueを返す ルートのデータが
-
Pythonでインドの旗を作るプログラム
グラフを描画するPythonのライブラリには、グラフを提供するだけでなく、フラグなどの他の図を柔軟に描画できる非常に広範な機能があります。その意味で、これらのモジュールには芸術的なタッチがあります。この記事では、ライブラリnumpyとmatplotlibを使用してインドの旗を描く方法を説明します。 アプローチ 同じ幅の長方形を3つ作成し、適切な色と境界線で描画します。 pyplot関数を使用して、中央の長方形の中央にAshokChakraの円を描きます。 numpyとmatplotlibを使用して、AshokChakra内に24本の線を描画します。 上記のすべての図では