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

Pythonでn-aryツリーのコピーを作成するプログラム


ルートが「ルート」に与えられているn-aryツリーが提供されたとします。完全なn-aryバイナリツリーのコピーを作成し、両方のツリーのプレオーダートラバーサルを実行する必要があります。コピーしたツリーは、別のルートノードを使用して保存する必要があります。ツリーのノード構造を以下に示します-

Node:
   value : <integer>
   children : <array>

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

Pythonでn-aryツリーのコピーを作成するプログラム

、出力は

になります
[14, 27, 32, 42, 56, 65]

入力ツリーと出力ツリーのプレオーダー表現は、ツリーの正確なコピーが作成されたものと同じになります。

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

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

    • ルートを返す

  • head:=rootの値を持つ新しいノード

  • q:=要素rootとheadを含む新しい両端キュー

  • qが空でない間、実行します

    • node:=qから最初の要素をポップします

    • cloned:=qから最初の要素をポップ

    • node.childrenのchldごとに、実行します

      • new_n:=chldの値を含む新しいノード

      • クローンの子にnew_nを追加します

      • qの最後にchldとnew_nを挿入します

  • リターンヘッド

例(Python)

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

from queue import deque
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)

def solve(root):
   if not root:
      return root
   head = Node(root.val)
   q = deque([(root, head)])
   while q:
      node, cloned = q.popleft()
      for chld in node.children:
         new_n = Node(chld.val)
         cloned.children.append(new_n)
         q.append((chld,new_n))
   return head

def treeprint(node, tree):
   if node == None:
      tree.append("None")
      return tree
   if tree == None:
      tree = []
   tree.append(node.val)
   for child in node.children:
      treeprint(child, tree)
   return tree

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

copynode = solve(root)
print(treeprint(copynode, None))

入力

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

出力

[14, 27, 32, 42, 56, 65]

  1. Pythonでツリーの左端の最深ノードを見つけるプログラム

    二分木があるとしましょう。最も深いノードの値を見つける必要があります。最も深いノードが複数ある場合は、左端の最も深いノードを返します。 したがって、入力が次のような場合 4と7が最も深いが、4が最も残っているため、出力は4になります。 これを解決するには、次の手順に従います- queue:=1つのノードルートを持つキュー。 left_max:=ルートの値 キューのサイズが0より大きい場合は、実行してください level_size:=キューのサイズ 0からlevel_sizeの範囲のiの場合、実行 temp:=キューの最初の要素を削除します

  2. Pythonでインドの旗を作るプログラム

    グラフを描画するPythonのライブラリには、グラフを提供するだけでなく、フラグなどの他の図を柔軟に描画できる非常に広範な機能があります。その意味で、これらのモジュールには芸術的なタッチがあります。この記事では、ライブラリnumpyとmatplotlibを使用してインドの旗を描く方法を説明します。 アプローチ 同じ幅の長方形を3つ作成し、適切な色と境界線で描画します。 pyplot関数を使用して、中央の長方形の中央にAshokChakraの円を描きます。 numpyとmatplotlibを使用して、AshokChakra内に24本の線を描画します。 上記のすべての図では