Convert Sorted List to Binary Search Tree

Convert Sorted List to Binary Search Tree


今天是一道有關(guān)鏈表和二叉樹(shù)的題目颊郎,來(lái)自LeetCode但金,難度為Medium,Acceptance為26%遣臼。

題目如下

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
Example

Example

解題思路及代碼見(jiàn)閱讀原文

回復(fù)0000查看更多題目

解題思路

首先翘单,該題還是有難度的,但是我們換一個(gè)思路可能就會(huì)簡(jiǎn)單很多伪冰,即如果是將一個(gè)排序二叉樹(shù)轉(zhuǎn)換成鏈表誓酒,相信大多數(shù)同學(xué)都會(huì)做,無(wú)非是一個(gè)中序遍歷。

那么靠柑,這里講鏈表轉(zhuǎn)換成二叉樹(shù)也是一樣的思路寨辩,即一個(gè)中序遍歷,其具體思路如下歼冰。

按照中序遍歷的思路靡狞,應(yīng)該先生成左子樹(shù),然后是根節(jié)點(diǎn)隔嫡,最后的右子樹(shù)甸怕。那么,很明顯這是一個(gè)遞歸的結(jié)構(gòu)腮恩。那么剩下的問(wèn)題就是如何確定遞歸的終止條件梢杭。

因?yàn)樵谵D(zhuǎn)換的過(guò)程中,需要計(jì)算各子鏈表的長(zhǎng)度秸滴,那么這里就可以由此來(lái)終止遞歸武契,即當(dāng)長(zhǎng)度等于0時(shí)終止。下面我們來(lái)看代碼缸榛。

代碼如下

C++版
class Solution {
public:
    ListNode *list;
    int count(ListNode *node){
        int size = 0;
        while (node) {
            ++size;
            node = node->next;
        }
        return size;
    }

    TreeNode *generate(int n){
        if (n == 0)
            return NULL;
        TreeNode *node = new TreeNode(0);
        node->left = generate(n / 2);
        node->val = list->val;
        list = list->next;
        node->right = generate(n - n / 2 - 1);
        return node;
    }

    TreeNode *sortedListToBST(ListNode *head) {
        this->list = head;
        return generate(count(head));
    }
};
java版
private ListNode node;

public TreeNode sortedListToBST(ListNode head) {
    if(head == null){
        return null;
    }

    int size = 0;
    ListNode runner = head;
    node = head;

    while(runner != null){
        runner = runner.next;
        size ++;
    }

    return inorderHelper(0, size - 1);
}

public TreeNode inorderHelper(int start, int end){
    if(start > end){
        return null;
    }

    int mid = start + (end - start) / 2;
    TreeNode left = inorderHelper(start, mid - 1);

    TreeNode treenode = new TreeNode(node.val);
    treenode.left = left;
    node = node.next;

    TreeNode right = inorderHelper(mid + 1, end);
    treenode.right = right;

    return treenode;
}

關(guān)注我
該公眾號(hào)會(huì)每天推送常見(jiàn)面試題吝羞,包括解題思路是代碼,希望對(duì)找工作的同學(xué)有所幫助

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末内颗,一起剝皮案震驚了整個(gè)濱河市钧排,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌均澳,老刑警劉巖恨溜,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異找前,居然都是意外死亡糟袁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)躺盛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)项戴,“玉大人,你說(shuō)我怎么就攤上這事槽惫≈芏#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵界斜,是天一觀的道長(zhǎng)仿耽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)各薇,這世上最難降的妖魔是什么项贺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上开缎,老公的妹妹穿的比我還像新娘棕叫。我一直安慰自己,他們只是感情好啥箭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布谍珊。 她就那樣靜靜地躺著,像睡著了一般急侥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侮邀,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天坏怪,我揣著相機(jī)與錄音,去河邊找鬼绊茧。 笑死铝宵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的华畏。 我是一名探鬼主播鹏秋,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亡笑!你這毒婦竟也來(lái)了侣夷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仑乌,失蹤者是張志新(化名)和其女友劉穎百拓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晰甚,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衙传,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厕九。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖捶。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扁远,靈堂內(nèi)的尸體忽然破棺而出俊鱼,到底是詐尸還是另有隱情,我是刑警寧澤穿香,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布亭引,位于F島的核電站,受9級(jí)特大地震影響皮获,放射性物質(zhì)發(fā)生泄漏焙蚓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望购公。 院中可真熱鬧萌京,春花似錦、人聲如沸宏浩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)比庄。三九已至求妹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佳窑,已是汗流浹背制恍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留神凑,地道東北人净神。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像溉委,于是被迫代替她去往敵國(guó)和親鹃唯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容