【LeetCode] 109.順序リスト変換バイナリ検索ツリー☆☆☆(再帰的)

説明

要素は、よくバランスのバイナリ検索ツリーに変換するために、昇順にソートされ、重リンクリストが与えられました。

この問題では、高度にバランスバイナリツリーは二分木は、各ノードの左及び右サブツリーを指すことは、多くて1以上の絶対値の高さの差です。

例:

所与の順序付きリスト:[-10、-3、0、5、9]、

一つの可能​​な答えは:[0、-3、9、-10、ヌル、5]は、この高さ平衡二分探索木の下に表すことができます。

0
/ \
-3 9
/ /
-10 5

解決

順序付きリスト、バランスの取れたバイナリツリーは、中間ノードのノードの2つの部分についてです2、にリストを考えるのが自然です。およそ2部に再帰的ノード。

コード

再帰

/ ** 
 *単一リンクリストのための定義。
 *パブリッククラスListNode { 
 * int型のval; 
 * ListNode次。
 * ListNode(INT X){ヴァル= X。} 
 *} 
 * / 
/ ** 
 バイナリツリーノードのための*の定義。
 *公共のクラスのTreeNode { 
 * int型のval; 
 *のTreeNodeは左。
 *ツリーノードを右。
 *ツリーノード(INT X){ヴァル= X。} 
 *} 
 * / 
クラスソリューション{
     // 
    公共のTreeNode sortedListToBST(ListNodeヘッド){
         場合ヌル == ヘッド){
             リターン ヌル
        } そう であればヌル == head.next){
             リターン 新しいツリーノード(head.val)。
        } 
        ListNode遅い = ヘッド。
        速いListNode = ヘッド。
        ListNode前 = ヘッド。
        一方、(!速い= ヌル!&& fast.next = NULL ){ 
            プリ = 遅いです。
            遅い =はslow.next。
            速い = fast.next.next。
        } 
        pre.next = NULL ; 
        のTreeNodeルート = 新しいツリーノード(slow.val)。
        root.left = sortedListToBST(ヘッド)
        root.right = sortedListToBST(slow.next)。
        リターンルート。
    } 
}

最適化のポイント

番号付きリストは、クエリの複雑さを軽減、注文した配列に変換することができます。時間・ソリューションのためのスペース。

バイナリツリーの検索にリストを命じました

おすすめ

転載: www.cnblogs.com/fanguangdexiaoyuer/p/12155685.html