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

Pythonでバイナリツリーのリーフノードと非リーフノードを検索するプログラム


二分木があるとすると、2つの数字のリストを見つける必要があります。最初の数字はツリー内の葉の数で、2番目の数字は非葉ノードの数です。

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

Pythonでバイナリツリーのリーフノードと非リーフノードを検索するプログラム

3つのリーフと2つの非リーフノードがあるため、出力は(3、2)になります。

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

  • nがnullの場合、
    • return(0、0)
  • nの左側がnullで、nの右側がnullの場合、
    • return(1、0)
  • 左:=ソルブ(nの左)
  • right:=resolve(right of n)
  • return(left [0] + right [0]、1 + left [1] + right [1])

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

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, n):
      if not n:
         return 0, 0
      if not n.left and not n.right:
         return 1, 0
      left, right = self.solve(n.left), self.solve(n.right)
      return left[0] + right[0], 1 + left[1] + right[1]
ob = Solution()
root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)
print(ob.solve(root))

入力

root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)

出力

(3, 2)

  1. Pythonの二分木でk長のパスを見つけるプログラム

    一意の値を含む二分木があり、別の値kもあるとすると、ツリー内のkの長さの一意のパスの数を見つける必要があります。パスは、親から子へ、または子から親へのいずれかになります。一部のノードが一方のパスに表示され、もう一方のパスには表示されない場合、2つのパスは異なると見なされます。 したがって、入力が次のような場合 k =3の場合、パスは[12,8,3]、[12,8,10]、[8,12,15]、[3,8,10]であるため、出力は4になります。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullの場合、 1とk

  2. Pythonで二分木の最大幅を見つけるプログラム

    二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d