Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでほぼBSTを正確なBSTにするプログラム


二分木があり、それがほぼ二分探索木であると仮定します。 2つのノードの値のみが交換されます。それを修正して、二分探索木を返す必要があります。

したがって、入力が次のような場合

PythonでほぼBSTを正確なBSTにするプログラム

その場合、出力は次のようになります

PythonでほぼBSTを正確なBSTにするプログラム

これを解決するには、次の手順に従います-

  • prev_node:=null、min_node:=null、max_node:=null
  • found_one:=False
  • ルートを順番に走査するノードごとに、
      を実行します。
    • prev_nodeがnullでない場合、
      • ノードの値
      • min_nodeがnullまたはノードの値
      • min_node:=node
    • max_nodeがnullまたはmax_nodeの値
    • max_node:=prev_node
  • found_oneがtrueの場合、
    • ループから抜け出す
  • それ以外の場合、
    • found_one:=True
  • prev_node:=node
  • min_nodeとmax_nodeの値を入れ替えます
  • ルートを返す
  • 理解を深めるために、次の実装を見てみましょう-

    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,

    1. Pythonで1つの値がBSTに存在するかどうかを確認するプログラム

      二分探索木とvalという別の入力があるとすると、valがツリーに存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 val =7の場合、ツリーに7が存在するため、出力はTrueになります。 これを解決するために、次の手順に従います- 関数solve()を定義します。これはルートになります、val ルートがnullの場合、 Falseを返す ルートのデータがvalと同じ場合、 Trueを返す ルートのデータが

    2. Pythonでインドの旗を作るプログラム

      グラフを描画するPythonのライブラリには、グラフを提供するだけでなく、フラグなどの他の図を柔軟に描画できる非常に広範な機能があります。その意味で、これらのモジュールには芸術的なタッチがあります。この記事では、ライブラリnumpyとmatplotlibを使用してインドの旗を描く方法を説明します。 アプローチ 同じ幅の長方形を3つ作成し、適切な色と境界線で描画します。 pyplot関数を使用して、中央の長方形の中央にAshokChakraの円を描きます。 numpyとmatplotlibを使用して、AshokChakra内に24本の線を描画します。 上記のすべての図では