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

Pythonの特定のツリーから最大の二分探索サブツリーを見つけるプログラム


二分木があるとすると、二分探索木として最大のサブツリー(ノード数が最大)を見つける必要があります。

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

Pythonの特定のツリーから最大の二分探索サブツリーを見つけるプログラム

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

Pythonの特定のツリーから最大の二分探索サブツリーを見つけるプログラム

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

  • max_size:=[0]
  • max_node:=[null]
  • 関数traverse()を定義します。これはノードを取ります
  • ノードがnullの場合、
    • nullを返す
  • 左:=トラバース(ノードの左)
  • right:=traverse(ノードの右側)
  • lst:=左+[ノードの値]+右
  • lstがソートされている場合、
    • max_size [0]
    • max_size [0]:=lstのサイズ
    • max_node [0]:=ノード
  • return lst
  • traverse(root)
  • メインメソッドからreturnmax_node[0]
  • 例(Python)

    理解を深めるために、次の実装を見てみましょう-

    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)
    class Solution:
       def solve(self, root):
          max_size = [0]
          max_node = [None]
          def traverse(node):
             if not node:
                return []
          left = traverse(node.left)
          right = traverse(node.right)
          lst = left + [node.val] + right
          if sorted(lst) == lst:
             if max_size[0] < len(lst):
                max_size[0] = len(lst)
                max_node[0] = node
          return lst
    
       traverse(root)
       return max_node[0]
    ob = Solution()
    root = TreeNode(12)
    root.left = TreeNode(3)
    root.right = TreeNode(5)
    root.right.left = TreeNode(4)
    root.right.right = TreeNode(6)
    print_tree(ob.solve(root))

    入力

    root = TreeNode(12)
    root.left = TreeNode(3)
    root.right = TreeNode(5)
    root.right.left = TreeNode(4)
    root.right.right = TreeNode(6)

    出力

    4, 5, 6,

    1. 与えられた二分木の垂直レベルがPythonでソートされているかどうかを確認します

      二分木があるとします。二分木の与えられた垂直レベルがソートされているかどうかをチェックする必要があります。 2つのノードがオーバーラップしている場合は、それらが属するレベルでソートされた順序になっていることを確認してください。 したがって、入力がl =-1のような場合 レベル-1の要素は3.7であり、ソートされているため、出力はTrueになります。 これを解決するには、次の手順に従います- ルートがnullの場合、 Trueを返す previous_value:=-inf current_level:=0 current_node:=値が0の新

    2. Pythonで特定の二分木で最大の完全なサブツリーを見つける

      特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま