LeetCodeブラシタイトルのメモ - 再帰 - 二分探索木の規則的な配列に変換します

タイトル説明

昇順に従って順序付けられた配列は、高度にバランスの取れた二分探索木に変換されます。

この問題において、非常にバランスの取れた二分木は、二分木は、各ノードの左及び右サブツリーを指すことは、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、ルートルートが= NUM​​S [中間]

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 }
View Code

 

おすすめ

転載: www.cnblogs.com/sqchao/p/11073804.html