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

Pythonの二分木で一人っ子の数を見つけるプログラム


二分木があるとしましょう。一人っ子であるノードの数を見つける必要があります。私たちが知っているように、ノードxは、その親にxである子が1つだけある場合、一人っ子ノードと呼ばれます。

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

Pythonの二分木で一人っ子の数を見つけるプログラム

その場合、出力は2になります。これは、8と6が唯一の子であるためです。

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

  • rootがnullの場合、
    • 0を返す
  • d:=両端キュー
  • dの最後にルートを挿入
  • count:=0
  • dが空でない場合は、
    • current:=dの左側の要素と左側の要素を削除
    • 現在の左側がnullでない場合、
      • 電流の左側をdに挿入
      • 現在の権利がnullの場合、
        • count:=count + 1
      • 現在の権利がnullでない場合、
        • 電流の権利をdに挿入
        • 現在の左側がnullの場合、
          • count:=count + 1
  • 返品数

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

サンプルコード

from collections import deque

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

class Solution:
   def solve(self, root):
      if not root:
         return 0
      d = deque()
      d.append(root)
      count = 0
      while d:
         current = d.popleft()
         if current.left:
            d.append(current.left)
            if not current.right:
               count += 1
            if current.right:
               d.append(current.right)
               if not current.left:
                  count += 1
         return count

ob = Solution()
root = TreeNode(9)
root.left = TreeNode(7)
root.right = TreeNode(10)
root.left.right = TreeNode(8)
root.right.right = TreeNode(6)
print(ob.solve(root))

入力

root = TreeNode(9)

root.left = TreeNode(7)

root.right = TreeNode(10)

root.left.right = TreeNode(8)

root.right.right = TreeNode(6)

出力

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