BST の基本的な知識があれば、ツリーから並べ替えられた要素のセットを取得することは、実際には非常に簡単であることに精通しているはずです。LVR
/ traversingに精通している場合はRVL
、「答え」にスキップできます。
ツリーを繰り返しトラバースする:
ツリーのトラバースは、通常、3 文字の組み合わせで表されLVR
ます。L
残っています。R
は正しい。V
訪問を意味します。
これは、ツリーをトラバースするときにたどるパターンを示しています。L
ツリーが存在する場合は、ツリーを左のノードまで上っていくという意味です。R
正しい。V
現在のノードでの印刷などの操作を意味します。再帰を使用します。それは非常に重要です。
今。ソートされたセットを取得する方法。LVR
訪問が印刷またはプッシュを意味する場合は簡単です。
例 - 完全なウォークスルー:
(8) You start in root. `L` - go left.
(3) You are in (3). You go `LVR` for this node again - recurrence. `L`
(1) You are in (1). Now *again* `LVR`.
However there is no left node so we go to `V` - visit/print 1. Now `R` - no right node. End. By recurrence we go back to 3.
(3) - We're done with `L`. We do `V`. Print 3.
(3) - `R`.
(6) You are in (6) - `LVR` again. 'L'
(4) You are in (4) - `L` does not exists. Print 4. `R` does not exist. Back one level.
(6) - `V`. Print 6.
(6) - `R`.
You are in (7) - `L` does not exists. Print 7. `R` does not exist. Back one level.
(6) - `LVR` Done. Back one level.
(3) - `LVR` Done. Back one level.
(8) - `R`.
(10) You are in 10. `L` Does not exist.
(10) `V`. Print 10.
(10) `R`.
(14) You are in 14.
(14) `L`.
(13) You are in 13. `L` does not exists. Print 14. `R` does not exist. Back one level.
(14) `V`. Print 14.
(14) `R`. Does not exist. Back one level.
(10) Done with `R`. Back one level.
(8) Done with `R`. Back one level.
Haha we were on root node so we are done.
プリントをフォローする場合。セット全体を最低から最高の順に印刷したことがわかります。RVL
pattern も同様ですが、最初に右に行くため、最初に最も右側のノードにアクセスするため、順序は降順になります。魔法はなく、各ノードに 1 回だけアクセスするため、時間計算量はO(n)
です。
答え:
簡単な方法。通常のLVR
トラバースを行います。ただし、範囲に収まる場合にのみ数値を出力します。少し難しいですが、平均的および極端なケースの方が優れています。開始ノードを見つけます。次に、トラバースを開始し、各訪問で上限とのみ比較し、ノード データがそれを超えると停止します。
もちろん、印刷する代わりに、要素を並べ替えた順序で保存するために、スタックまたは他のもの (リストなど) を使用できます。