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]
-
Pythonでの二分木順序トラバーサル
二分木があるとします。再帰を使用せずに、順序どおりのトラバーサルスキームを使用してこのツリーをトラバースする必要があります。したがって、ツリーが次のような場合 その場合、トラバーサルは[2,5,7,10,15,20]になります。 これを解決するには、次の手順に従います- 2つの配列resとスタックを作成し、curr:=rootを設定します 1つの無限ループを実行します 現在がnullではない場合 currをスタックにプッシュし、curr:=currの左側に設定します スタックの長さが0の場合、resを返します node:=スタックからポップされた要素 ノードの値をresに
-
Pythonで二分木を反転する
二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode: def __init__(self, data, left = None, right = None):