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

Pythonのバイナリツリーから子が1つしかないすべてのノードを削除するプログラム?


二分木ルートがあるとします。子が1つだけのすべてのノードを削除する必要があります。

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

Pythonのバイナリツリーから子が1つしかないすべてのノードを削除するプログラム?

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

Pythonのバイナリツリーから子が1つしかないすべてのノードを削除するプログラム?

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

  • ソルブ()と呼ばれるメソッドを定義します。これはツリールートを取ります

  • ルートがnullの場合、

    • ルートを返す

  • ルートの左側がnullで、ルートの右側がnullの場合、

    • ルートを返す

  • ルートの左側がnullの場合、

    • リターンソルブ(ルートの右)

  • ルートの権利がnullの場合、

    • リターンソルブ(ルートの左側)

  • ルートの左側:=solve(ルートの左側)

  • ルートの権利:=solve(ルートの権利)

  • ルートを返す


class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right

def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)

class Solution:
   def solve(self, root):
      if not root:
         return root

      if not root.left and not root.right:
         return root

      if not root.left:
         return self.solve(root.right)

      if not root.right:
         return self.solve(root.left)

      root.left = self.solve(root.left)
      root.right = self.solve(root.right)

      return root

ob = Solution()
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.right = TreeNode(5)
root.left.left.right = TreeNode(6)
root.right.right.left = TreeNode(7)
root.right.right.right = TreeNode(8)

res = ob.solve(root)
print_tree(res)

入力

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.right = TreeNode(5)
root.left.left.right = TreeNode(6)
root.right.right.left = TreeNode(7)
root.right.right.right = TreeNode(8)

出力

6, 1, 7, 5, 8,

  1. Pythonのバイナリツリーから偶数の値を持つすべての葉を削除するプログラム

    二分木があるとすると、値が偶数のすべての葉を繰り返し削除します。すべてを削除した後、値が偶数のルートしかない場合は、それも削除されます。 したがって、入力が次のような場合 その場合、出力は次のようになります これを解決するには、次の手順に従います- 関数solve()を定義します。これが定着します ルートがnullの場合、 nullを返す ルートの左側:=solve(ルートの左側) ルートの権利:=solve(ルートの権利) ルートがリーフで、ルートのデータが偶数の場合、 nullを返す ルートを返す

  2. Pythonの範囲内にないすべてのノードをBSTから削除するプログラム

    低値と高値の2つの値を持つBSTがあるとすると、[低、高](両端を含む)の間にないすべてのノードを削除する必要があります。 したがって、入力が次のような場合 低=7高=10の場合、出力はになります。 これを解決するには、次の手順に従います- 関数solve()を定義します。これは根を下ろし、低く、高くなります rootがnullの場合、 戻る returnsolve(ルートの右、低、高) ルートのデータが高い場合は returnsolve(ルートの左側、低、高) ルートの権利:=solve(ルートの権利、低、高) ルートの左側:=solve(ルートの左側