letecode [108] - バイナリ検索ツリーにソートされた配列に変換

要素は、昇順にソート高バランスBSTに変換される配列を指定。
この問題のために、高さ平衡二分木は、各ノードの2つのサブツリーの深さは1以上によって異なることはないれたバイナリツリーとして定義されます。
例:
所定のソートされた配列:[-10、-3,0,5,9]
一つの可能​​な答えは:以下の高さバランスがBSTを表す[0、-3,9-、-10、ヌル、5]。
      0
     / \
   -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メガバイトを

おすすめ

転載: www.cnblogs.com/lpomeloz/p/10993620.html