PythonのStackを使用して、指定されたポストオーダートラバーサルからBSTを構築します
したがって、入力が[6、12、10、55、45、15]の場合、出力は
これを解決するには、次の手順に従います-
-
関数solve()を定義します。これには後注文が必要です
-
n:=ポストオーダーのサイズ
-
root:=postorderの最後の要素で新しいツリーノードを作成します
-
stk:=スタック
-
ルートをstkに挿入
-
i:=n-2
-
i> =0の場合、実行
-
x:=値postorder [i]
で新しいノードを作成します -
stkが空ではなく、postorder [i]
-
temp:=stkのトップ
-
stkから最上位の要素を削除する
-
-
tempがnullでない場合、
-
temp.left:=x
-
-
それ以外の場合
-
stkトップ要素の右側:=x
-
-
xをstkに挿入
-
i:=i-1
-
-
ルートを返す
-
メインの方法から、次のようにします-
-
リターンソルブ(ポストオーダー)
例
理解を深めるために、次の実装を見てみましょう-
class TreeNode: def __init__(self, data = 0): self.val = data self.left = None self.right = None def solve(postorder): n = len(postorder) root = TreeNode(postorder[n - 1]) stk = [] stk.append(root) i = n - 2 while ( i >= 0): x = TreeNode(postorder[i]) temp = None while (len(stk) > 0 and postorder[i] < stk[-1].val) : temp = stk[-1] stk.pop() if (temp != None): temp.left = x else: stk[-1].right = x stk.append(x) i = i - 1 return root def build_tree(postorder): return solve(postorder) def inord( node): if node: inord(node.left) print( node.val, end = " ") inord(node.right) postorder = [6, 12, 10, 55, 45, 15] root = build_tree(postorder) print( "Inorder traversal:", end = " ") inord(root)
入力
[6, 12, 10, 55, 45, 15]
出力
6 10 12 15 45 55
-
Pythonでの二分木順序トラバーサル
二分木があるとします。再帰を使用せずに、順序どおりのトラバーサルスキームを使用してこのツリーをトラバースする必要があります。したがって、ツリーが次のような場合 その場合、トラバーサルは[2,5,7,10,15,20]になります。 これを解決するには、次の手順に従います- 2つの配列resとスタックを作成し、curr:=rootを設定します 1つの無限ループを実行します 現在がnullではない場合 currをスタックにプッシュし、curr:=currの左側に設定します スタックの長さが0の場合、resを返します node:=スタックからポップされた要素 ノードの値をresに
-
Pythonでのスタックおよびキューとしてのリストの使用
この記事では、Python3.xのスタックとキューの構造について学習します。またはそれ以前。ここでは、これらのデータ構造内での動作と変更について説明します- これには-が含まれます 挿入操作(プッシュ、エンキュー) 削除操作(ポップ、デキュー) 表示/トラバース操作 前提条件 :リストとリスト操作 関連データ構造 :リスト操作 関連画像 スタック スタックでは、オブジェクトは互いに重ねて格納され、これらのオブジェクトは到着の逆の順序で削除されます。つまり、LIFOの概念に従います。 LIFOは、スタックデータ構造で後入れ先出しタイプの配置に従うことを意味します。 スタックで