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

Pythonでn-aryツリーの直径を見つけるプログラム


仮に、n-aryツリーが与えられ、ツリーの直径を決定すると言われているとします。ツリーの直径は、ツリーの任意の2つのリーフノード間に存在する最長のパスです。木の直径を表す整数値を見つけて返す必要があります。

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

Pythonでn-aryツリーの直径を見つけるプログラム

その場合、出力は3になります。

このn-aryツリーの直径は、エッジ27-> 14、14-> 42、および42->56または42->65で構成されます(図では赤い線でマークされています)。パスの長さは3です。

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

  • ans:=1

  • 関数depth()を定義します。これが定着します

    • ルートが空でない場合は、

      • 0を返す

    • 子:=値0、0を含む新しいリスト

    • temp_children:=新しいリスト

    • ルートの子の各子に対して、実行します

      • temp_childrenの最後にdepth(child)を挿入します

    • (temp_children)のサイズが0より大きい場合、

      • 子供:=temp_children

    • ans:=ansの最大値、sum(リストの子を並べ替える[(子)のインデックスの長さ-2から最後まで])+ 1

    • 子の最大数+1を返す

  • 深さ(ルート)

  • return(ans -1)

例(Python)

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

class Node:
   def __init__(self, value, child = None) -> None:
      self.val = value
      self.children = []
      if child != None:
         for value in child:
            self.children.append(value)

ans = 1
def solve(root):
   def depth(root):
      global ans
      if not root:
         return 0
      children = [0, 0]
      temp_children = [depth(child) for child in root.children]
      if len(temp_children) > 0:
         children = temp_children
      ans = max(ans, sum(sorted(children)[-2:]) + 1)

      return max(children) + 1
   depth(root)

   return ans -1

node6 = Node(65)
node5 = Node(56)
node4 = Node(42, [node5, node6])
node3 = Node(32)
node2 = Node(27)
node1 = Node(14, [node2, node3, node4])
root = node1

print(solve(root))

入力

node6 = Node(65)
node5 = Node(56)
node4 = Node(42, [node5, node6])
node3 = Node(32)
node2 = Node(27)
node1 = Node(14, [node2, node3, node4])
root = node1

出力

3

  1. Pythonプログラムで円柱の周囲を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 直径と高さを入力し、円柱の周囲長を見つけます。 周囲長は、円柱、つまり長方形の側面図に他なりません。 したがって、周囲長=2 *(h + d) ここで、dは円柱の直径です hは円柱の高さです それでは、実装を見てみましょう 例 # Function to calculate the perimeter of a cylinder def perimeter( diameter, height ) :    return 2 * ( diameter + height )

  2. 円柱の周囲を見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 −直径と高さを入力し、円柱の周囲長を求めます 周囲は円柱の側面図、つまり長方形に他なりません したがって、周囲長=2 *(h + d) ここで、dは円柱の直径です hは円柱の高さです それでは、実装を見てみましょう 例 # Function to calculate the perimeter of a cylinder def perimeter( diameter, height ) :    return 2 * ( diameter + height ) # ma