LeetCode算法題-Convert Sorted Array to Binary Search Tree(Java實現)

這是悅樂書的第166次更新,第168篇原創(chuàng)

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第25題(順位題號是108)。給定一個數組,其中元素按升序排序,將其轉換為高度平衡的二叉搜索樹。例如:

給定排序數組:[ -10,-3, 0, 5, 9]

一個可能的答案是:[0,-3, 9,-10,null,5],它代表以下高度平衡的二叉搜索樹:

        0
      /   \
    -3     9
    /     /
  -10    5

本次解題使用的開發(fā)工具是eclipse,jdk使用的版本是1.8,環(huán)境是win7 64位系統(tǒng),使用Java語言編寫和測試。

02 相關概念

在探討如何解題前,我們先把題目中的兩個概念弄清楚。

二叉搜索樹,是一棵空樹,或者是具有下列性質的二叉樹:

1)若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值

2)若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值

3)任意節(jié)點的左、右子樹也分別為二叉搜索樹

總結一下就是任意節(jié)點的值始終滿足 左節(jié)點值 < 根節(jié)點值 < 右節(jié)點值 這個條件。

平衡二叉樹,是一顆空樹,或者具有下列性質的二叉樹:

1)左子樹是一顆二叉平衡樹

2)右子樹是一顆二叉平衡樹

3)左右兩個子樹的高度差的絕對值不超過1

總結一下就是 |左子樹層數-右子樹層數| <= 1 。


另外,我們再來了解下二叉樹中序遍歷這個概念,這對我們解題會有所幫助。

中序遍歷,如果二叉樹不為空,則會首先遍歷左子樹,然后訪問根節(jié)點,最后遍歷右子樹。

      A
    /    \
   B      C
  / \    /
 D   E  F

上面的二叉樹中序遍歷的結果是:DBEAFC 。

03 解題

我們發(fā)現那個給出的示例數組,其實就是那個二叉平衡搜索樹的中序遍歷結果,數組的中間值就是二叉樹的根節(jié)點,往前就是左子樹,往后就是右子樹,所以我們可以借助二分法,將數組分為三部分,第一部分從首位到中間位,第二部分是中間位,第三部分是中間位到尾位,利用這三部分分別遞歸給二叉樹設值即可。

public TreeNode sortedArrayToBST(int[] nums) {
    return addNode(nums, 0, nums.length-1);
}

public TreeNode addNode(int[] nums, int left, int right){
    if (left > right) {
        return null;
    }
    int mid = (right + left)/2;
    TreeNode t = new TreeNode(nums[mid]);
    t.left = addNode(nums, left, mid-1);
    t.right = addNode(nums, mid+1, right);
    return t;
}


04 小結

以上就是全部內容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發(fā)就是對我最大的回報和支持!

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容

  • 題量有點多,建議Ctrl + F題號或題目哦~ 二叉樹的遍歷(前序遍歷,中序遍歷,后序遍歷)[144] Binar...
    野狗子嗷嗷嗷閱讀 9,111評論 2 37
  • 一些概念 數據結構就是研究數據的邏輯結構和物理結構以及它們之間相互關系,并對這種結構定義相應的運算,而且確保經過這...
    Winterfell_Z閱讀 5,877評論 0 13
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,467評論 1 31
  • 雨停了,蟬鳴漂浮在空中,我一個人出來散步。我已厭倦爭吵,只喜歡和流水清風應和。腳下的土地可以通向無窮的遠方,心里的...
    夏洛的后花園閱讀 124評論 0 0
  • 最近,琦寶不好好吃飯。于是,決定控制她的零食和飲料。 午飯,琦寶貝打開了一瓶飲料,琦爸爸說:“不要喝飲料了。” 琦...
    柒言祺語閱讀 845評論 0 1