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

Pythonでバイナリツリーのインオーダートラバーサルを実行するプログラム


二分木があるとしましょう。ルートのインオーダートラバーサルをリストとして含むリストを見つける必要があります。私たちが知っているように、順序のないトラバーサルは、ツリー内のすべてのノードをトラバースする方法です-

  • 左側のサブツリーを再帰的にトラバースします。

  • 現在のノードをトラバースします。

  • 右のサブツリーを再帰的にトラバースします。

この問題を繰り返し解決する必要があります。

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

Pythonでバイナリツリーのインオーダートラバーサルを実行するプログラム

その場合、出力は[12,13,4,16,7,14,22]

になります。

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

  • inorder:=新しいリスト

  • スタック:=空のスタック

  • 次のことを無限に行います。

    • ルートがnullでない場合、

      • ルートをスタックにプッシュします

      • ルート:=ルートの左側

    • それ以外の場合、スタックが空でない場合は

      • ルート:=スタックの最上位要素とスタックからのポップ

      • 順序の最後にルートの値を挿入します

      • ルート:=ルートの右

    • それ以外の場合

      • ループから出てきます

  • 順番に戻る

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

class TreeNode:
   def __init__(self, value):
      self.val = value
      self.left = None
      self.right = None
class Solution:
   def solve(self, root):
      inorder = []
      stack = []
      while True:
         if root:
            stack.append(root)
            root = root.left
         elif stack:
            root = stack.pop()
            inorder.append(root.val)
            root = root.right
         else:
            break
      return inorder

ob = Solution()
root = TreeNode(13)
root.left = TreeNode(12)
root.right = TreeNode(14)
root.right.left = TreeNode(16)
root.right.right = TreeNode(22)
root.right.left.left = TreeNode(4)
root.right.left.right = TreeNode(7)
print(ob.solve(root))

入力

root = TreeNode(13)
root.left = TreeNode(12)
root.right = TreeNode(14)
root.right.left = TreeNode(16)
root.right.right = TreeNode(22)
root.right.left.left = TreeNode(4)
root.right.left.right = TreeNode(7)

出力

[12, 13, 4, 16, 7, 14, 22]

  1. Pythonでの二分木順序トラバーサル

    二分木があるとします。再帰を使用せずに、順序どおりのトラバーサルスキームを使用してこのツリーをトラバースする必要があります。したがって、ツリーが次のような場合 その場合、トラバーサルは[2,5,7,10,15,20]になります。 これを解決するには、次の手順に従います- 2つの配列resとスタックを作成し、curr:=rootを設定します 1つの無限ループを実行します 現在がnullではない場合 currをスタックにプッシュし、curr:=currの左側に設定します スタックの長さが0の場合、resを返します node:=スタックからポップされた要素 ノードの値をresに

  2. Pythonで二分木を反転する

    二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode:    def __init__(self, data, left = None, right = None):