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

与えられた合計のトリプレットがPythonのBSTに存在するかどうかを確認します


整数値と数値「合計」を含む二分探索木(BST)が提供されているとします。提供されたBSTに、3つの要素の加算が提供された「合計」値に等しい、3つの要素のグループがあるかどうかを確認する必要があります。

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

与えられた合計のトリプレットがPythonのBSTに存在するかどうかを確認します

total =12の場合、出力はTrueになります。

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

  • temp_list:=ゼロで初期化された新しいリスト
  • ツリーを順番にトラバースしてtemp_listに配置します
  • 0から(temp_listのサイズ-2)の範囲のiの場合、1ずつ増やします。
    • 左:=i + 1
    • right:=temp_listのサイズ-1
    • 左<右、実行
      • temp_list [i] + temp_list [left] + temp_list [right]がsumと同じ場合、
        • Trueを返す
      • それ以外の場合、temp_list [i] + temp_list [left] + temp_list [right]
      • 左:=左+ 1
    • それ以外の場合、
      • right:=right-1
  • Falseを返す
  • 理解を深めるために、次の実装を見てみましょう-

    class TreeNode:
       def __init__(self, value):
          self.value = value
          self.right = None
          self.left = None
    def traverse_inorder(tree_root, inorder):
       if tree_root is None:
          return
       traverse_inorder(tree_root.left, inorder)
       inorder.append(tree_root.value)
       traverse_inorder(tree_root.right, inorder)
    def solve(tree_root, sum):
       temp_list = [0]
       traverse_inorder(tree_root, temp_list)
       for i in range(0, len(temp_list) - 2, 1):
          left = i + 1
          right = len(temp_list) - 1
          while(left < right):
             if temp_list[i] + temp_list[left] + temp_list[right] == sum:
                return True
             elif temp_list[i] + temp_list[left] + temp_list[right] < sum:
                left += 1
             else:
                right -= 1
       return False
    tree_root = TreeNode(5)
    tree_root.left = TreeNode(3)
    tree_root.right = TreeNode(7)
    tree_root.left.left = TreeNode(2)
    tree_root.left.right = TreeNode(4)
    tree_root.right.left = TreeNode(6)
    tree_root.right.right = TreeNode(8)
    print(solve(tree_root, 12))

    入力

    tree_root = TreeNode(5)
    tree_root.left = TreeNode(3)
    tree_root.right = TreeNode(7)
    tree_root.left.left = TreeNode(2)
    tree_root.left.right = TreeNode(4)
    tree_root.right.left = TreeNode(6)
    tree_root.right.right = TreeNode(8)
    12

    出力

    True

    1. C++の平衡二分探索木で与えられた合計を持つペアを見つけます

      平衡二分探索木とターゲット合計があるとすると、合計がターゲット合計に等しいペアであるかどうかをチェックするメソッドを定義する必要があります。この場合。二分探索木は不変であることに注意する必要があります。 したがって、入力が次のような場合 その場合、出力は(9 + 26 =35)になります。 これを解決するには、次の手順に従います- スタックs1、s2を定義する done1:=false、done2:=false val1:=0、val2:=0 curr1:=root、curr2:=root 無限ループ、実行- done1がfalseの場合、do − curr1が

    2. 与えられた合計のトリプレットがPythonのBSTに存在するかどうかを確認します

      整数値と数値「合計」を含む二分探索木(BST)が提供されているとします。提供されたBSTに、3つの要素の加算が提供された「合計」値に等しい、3つの要素のグループがあるかどうかを確認する必要があります。 したがって、入力が次のような場合 total =12の場合、出力はTrueになります。 これを解決するには、次の手順に従います- temp_list:=ゼロで初期化された新しいリスト ツリーを順番にトラバースしてtemp_listに配置します 0から(temp_listのサイズ-2)の範囲のiの場合、1ずつ増やします。 左:=i + 1 right:=temp_listのサ