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

Pythonでリンクリストをジグザグ二分木に変換するプログラム


単一リンクリストがあるとすると、次のルールを使用してそれをバイナリツリーパスに変換する必要があります-

  • リンクリストの先頭はルートです。
  • 後続の各ノードは、値が小さい場合は親の左の子になり、それ以外の場合は右の子になります。

したがって、入力が[2,1,3,4,0,5]の場合、出力は

になります。

Pythonでリンクリストをジグザグ二分木に変換するプログラム

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

  • 関数solve()を定義します。これはノードを取ります
  • ノードがnullの場合、
    • nullを返す
  • root:=ノードの値と同じ値のツリーノードを作成します
  • 次のノードがnullでない場合、
    • ノードの次の値<ノードの値の場合、
      • ルートの左側:=solve(ノードの次)
    • それ以外の場合、
      • ルートの権利:=solve(ノードの次)
  • ルートを返す

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

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
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, node):
      if not node:
         return None
         root = TreeNode(node.val)
      if node.next:
         if node.next.val < node.val:
            root.left = self.solve(node.next)
         else:
            root.right = self.solve(node.next)
      return root
ob = Solution()
L = make_list([2,1,3,4,0,5])
print_tree(ob.solve(L))

入力

[2,1,3,4,0,5]

出力

1, 3, 0, 5, 4, 2,

  1. Pythonの方向のリストを使用してバイナリツリーをトラバースするプログラム

    二分木があり、「R」(右)、「L」(左)、「U」(上)で構成される文字列のリストが移動するとします。ルートから開始して、次の移動で各移動を実行することにより、ツリーをトラバースする必要があります。「R」は、右の子へのトラバースを示します。 「L」は、左の子へのトラバースを示します。 「U」は、その親へのトラバースを示します。 したがって、入力が次のような場合 [R、 R、 U、 L]の場合、出力は3になります これを解決するには、次の手順に従います- 過去:=新しいリスト 移動の移動ごとに、実行します 過去の終わりにルートを挿入 移動が「L」と同じ場合、

  2. Pythonでバイナリツリーノードの兄弟値を見つけるプログラム

    値kと二分探索木があると仮定します。ここでは、各ノードはリーフであるか、2つの子を含みます。値kを含むノードを見つけて、その兄弟の値を返す必要があります。 したがって、入力が次のような場合 k =4.の場合、出力は10になります。 これを解決するには、次の手順に従います- 関数util()を定義します。これはルート、k、ansを取ります ルートの左側がnullでなく、ルートの右側がnullでない場合、 戻る ルートの値の場合、 ルートの権利の値がkと同じである場合、 ansの最後にルートの左側の値を挿入します 戻る それ以外の場