バックグラウンド
バイナリツリーは、そのすべてのノード最大2人の子供に持ってルート権限を取得し、ツリーです。
標識された二分木は、そのすべてのノードは正の整数で標識された二分木です。さらに、すべてのラベルは区別されます。
BST(バイナリ検索ツリー)は、各ノードのラベルは、その左の部分木のすべてのノードのラベルよりも大きく、その右サブツリーの全てのノードのラベルよりも小さくなっている標識された二分木です。たとえば、次はBSTです。
ラベル付きバイナリツリーの事前順序走査は、次の擬似コードによって定義されます。
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
より良い直観を得るには、次の画像を参照してください。
このバイナリツリーの頂点は、次の順序で印刷されます。
F, B, A, D, C, E, G, I, H
BSTについての詳細はこちら、先行予約の走査についての詳細はこちらをご覧ください。
チャレンジ
整数のリストを考えると、あなたのタスクは、その正確プリオーダートラバーサルプリントBSTがあるかどうかを決定することです。
入力
- 明確な正の整数aの空でないリスト。
- オプションで、の長さ。
出力
- truthyの値があれば、いくつかのBSTのプリオーダートラバーサルです。
- falseyのそれ以外の値。
ルール
- 有効な提出、I / O、抜け穴の標準ルールが適用されます。
- これはcode-golfであるため、最短のソリューション(バイト単位)が優先されます。いつものように、ゴルフ言語のとてつもなく短い解決策で、選択した言語で長い回答を投稿することを妨げないでください。
- これはルールではありませんが、ソリューションをテストするためのリンクとそれがどのように機能するかの説明が含まれていれば、あなたの答えはよりよく受け取られます。
例
Input ----> Output
[1] ----> True
[1,2,3,4] ----> True
[5,1,4,2,3] ----> True
[5,4,3,2,1,6,7,8,9] ----> True
[4,2,1,3,6,5,7] ----> True
[8,3,1,6,4,7,10,14,13] ----> True
[2,3,1] ----> False
[6,3,2,4,5,1,8,7,9] ----> False
[1,2,3,4,5,7,8,6] ----> False
[3,1,4,2] ----> False
このリンクをチェックして(Kevin Cruijssen提供)、例を視覚的に確認してください。