タイトル説明
昇順に従って順序付けられた配列は、高度にバランスの取れた二分探索木に変換されます。
この問題において、非常にバランスの取れた二分木は、二分木は、各ノードの左及び右サブツリーを指すことは、1以上ではないの絶対値との間の高さの差です。
例:
与えられた規則的な配列:[-10、-3,0,5,9]、
一つの可能な答えは:[0、-3,9-、-10、ヌル、5]、それは、この高さ平衡二分探索木の下に表すことができます。
0
/ \
-3 9
/ /
-10 5
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
問題解決のアイデア:
1、ルートルートが= NUMS [中間]
2、root.left =左の残りの部分の中間値
3、root.right =左の残りの部分の中間値
1 / ** 2 分木のノードのための*の定義。 3 *パブリッククラスツリーノード{ 4 * int型のval; 5 *のTreeNodeは左。 6 *のTreeNodeは正しいです。 7 *ツリーノード(INT X){ヴァル= X。} 8 *} 9 * / 10 クラスソリューション{ 11 公共のTreeNode sortedArrayToBST(INT [] NUMS){ 12 であれば(nums.length == 0)リターン ヌル。 13 他{ 14 リターン digui(NUMS、0、nums.length-1 )。 15 } 16 } 17 18 公衆ツリーノードdigui(int型 [] NUMS、INT左は、int型右){ 19 であれば(>左右){ 20 リターン ヌル。 21 } 22 23 INTミッド=左+(左右)/ 2。 // 避免溢出风险;;;; 24 ツリーノードのルート= 新しいツリーノード(NUMS [中間])。 25 root.left = digui(NUMS、左、中1 )。 26 root.right = digui(NUMS、ミッド+ 1 、右)。 27 リターン root; 28 } 29 }