要素は、昇順にソート高バランスBSTに変換される配列を指定。
この問題のために、高さ平衡二分木は、各ノードの2つのサブツリーの深さは1以上によって異なることはないれたバイナリツリーとして定義されます。
例:
所定のソートされた配列:[-10、-3,0,5,9]
一つの可能な答えは:以下の高さバランスがBSTを表す[0、-3,9-、-10、ヌル、5]。
0
/ \
-3 9
/ /
-10 5
/ \
-3 9
/ /
-10 5
効果の件名:
平衡二分木探索に変換する配列を昇順に、与えられました。
理解:
二分木検索、バイナリツリーにおける結果アレイ横断順序の定義によります。バイナリツリーは平衡二分木である必要があります。バイナリ出力が発生することがあります。
再帰的な思考を使用して、中間体アレイは、ルートノードであるだけでなく、左右のサブツリー、再帰のリーフノードの周囲の配列の配列と見なします。
これにより、二分木を構築するだけでなく、平衡二分木二分木の両方の構造は、バイナリツリーの探索であることを確認します。
コードC ++:
/ * * *バイナリツリーノードの定義。 *構造体のTreeNode { * INTヴァル。 *のTreeNode *左; *のTreeNode *右; *ツリーノード(int型X):(NULL)左のval(X)、右(NULL){} *}。 * / クラスソリューション{ パブリック: ツリーノード * AnSortedArrayToBST(ベクトル< INT >&NUMS、INT左、int型右){ 場合(>左右)戻りNULL。 int型半ば=(左右)/ 2 + 左; ツリーノード *ノード= 新しいですツリーノード(NUMS [中間])。 ノード - >左= AnSortedArrayToBST(NUMS、左、半ば1 )。 ノード - >右= AnSortedArrayToBST(NUMS、ミッド+ 1 右)。 リターン・ノード; } ツリーノード * sortedArrayToBST(ベクトル< INT >&NUMS){ int型 N = nums.size()。 もし(N == 0)リターンNULL。 戻り AnSortedArrayToBST(NUMS、0、N- 1 )。 } }。
結果:
で実行する場合: 28 MSの メモリ消費量: 21.2メガバイトを