leetcode二叉搜索樹中第K小的元素

歡迎關(guān)注本人的微信公眾號AI_Engine

如期而至翰守,leetcode系列第三篇~

題目:

給定一個二叉搜索樹疲酌,編寫一個函數(shù)kthSmallest來查找其中第k?個最小的元素。

示例 1:

輸入:?root = [3,1,4,null,2], k = 1

?? 3

? / \

1?? 4

? \

?? 2

輸出:?1

示例 2:

輸入: root = [5,3,6,2,4,null,null,1], k = 3

???????5

??????/ \

?????3???6

????/ \

???2???4

??/

1

輸出: 3

答案1:

答案2:

分析:

這道題是leetcode的中等難度題朗恳,在近兩年內(nèi)出過該面試題的公司有:騰訊,字節(jié)跳動粥诫,谷歌等等,主要考察的是樹怀浆,二分查找等知識點(diǎn)谊囚。從題目可知該樹為二叉搜索樹BST,如圖所示:

BST的特點(diǎn)是:

1.若其左子樹存在执赡,則其左子樹中每個節(jié)點(diǎn)的值都不大于該節(jié)點(diǎn)值镰踏。

2.若其右子樹存在,則其右子樹中每個節(jié)點(diǎn)的值都不小于該節(jié)點(diǎn)值搀玖。

那么分析這道題時首先還是對題目降維余境,求其二叉搜索樹的第K小的值驻呐,如果是求一個有序鏈表的第k個最小值是不是只需遍歷到第K個值就好了灌诅?沒錯,就是這么簡單含末,所有我們現(xiàn)在首先想辦法如何將一個二叉搜索樹變成一個有序鏈表猜拾!這就是本道題目考察的第一個知識點(diǎn):二叉樹的中序遍歷。二叉樹的中序遍歷可以將樹變成一個有序的鏈表佣盒,若存在如下二叉樹挎袜,則其中序遍歷就為[4,7,2,1,5,3,8,6],即從左子數(shù)開始中序遍歷,然后遍歷根節(jié)點(diǎn)盯仪,最后中序遍歷右子樹紊搪。我們可以發(fā)現(xiàn)這句描述里本身就帶有嵌套循環(huán),就是說整個樹的中序遍歷分別嵌套著左右子樹的中序遍歷全景。


那么如何實(shí)現(xiàn)二叉樹的中序遍歷呢耀石?leetcode的第94題就求其進(jìn)行了考察:


現(xiàn)在我們可以或得由二叉樹轉(zhuǎn)成的鏈表,但是我們沒有必要或得全部的鏈表爸黄,因?yàn)槲覀冎恍枨蟮玫贙個小的值滞伟。所以我們要做的是在適當(dāng)?shù)臅r機(jī)對其進(jìn)行截?cái)啵╞reak)。我們通過result列表存儲著中序遍歷的結(jié)果炕贵,然后當(dāng)result的長度為k時就停止遍歷梆奈,這樣返回的result[k-1]就是整個列表的第k個最小的值,也是整個二叉搜索樹第k小的值称开。

以上就是第一種解法亩钟,第二種方法與其略有不同。我們利用stack去存儲遍歷的每一個左子樹節(jié)點(diǎn)钥弯,然后當(dāng)某個節(jié)點(diǎn)為無左子樹時径荔,將其彈出stack,這意味著該節(jié)點(diǎn)比任何一個未遍歷到的節(jié)點(diǎn)都要小脆霎。然后將該節(jié)點(diǎn)的值存儲進(jìn)另一個列表res中总处,那么比他稍大的節(jié)點(diǎn)應(yīng)該存在其右子樹節(jié)點(diǎn)中或?yàn)槠涓腹?jié)點(diǎn),于是進(jìn)行其右子樹的遍歷睛蛛。當(dāng)對其所有左右子樹都遍歷完后鹦马,stack彈出其父節(jié)點(diǎn),并存儲在res中忆肾,然后遍歷父節(jié)點(diǎn)的右子樹荸频。如此循環(huán),周而復(fù)始~客冈。但是個人覺得還是第一種方法便于理解,而且對分而治之和遞歸等方法的理解都有好處和悦,不過還是隨個人喜好了渠缕,因?yàn)?000個讀者里有1000個哈姆雷特嘛。最后還是看一下執(zhí)行的結(jié)果吧:

這應(yīng)該是小G同學(xué)在國慶節(jié)最后一次更文了馍忽,我也想好好放個假了。每天工作學(xué)習(xí)還真是有點(diǎn)累遭笋,不過這可能就是當(dāng)初選擇北京,選擇這份職業(yè)的代價吧~~最后啰嗦一句:陪陪家人瓦呼,好好休假,看看閱兵谎替,十一快樂蹋辅!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秩命,隨后出現(xiàn)的幾起案子褒傅,更是在濱河造成了極大的恐慌,老刑警劉巖霹菊,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件支竹,死亡現(xiàn)場離奇詭異,居然都是意外死亡饶碘,警方通過查閱死者的電腦和手機(jī)馒吴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門饮戳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鬼吵,你說我怎么就攤上這事篮赢。” “怎么了启泣?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵寥茫,是天一觀的道長。 經(jīng)常有香客問我纱耻,道長,這世上最難降的妖魔是什么玖喘? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任累奈,我火速辦了婚禮急但,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘戒努。我一直安慰自己,他們只是感情好柏卤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布缘缚。 她就那樣靜靜地躺著敌蚜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齐媒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天喻括,我揣著相機(jī)與錄音唬血,去河邊找鬼。 笑死拷恨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腕侄。 我是一名探鬼主播小泉,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼微姊,長吁一口氣:“原來是場噩夢啊……” “哼柒桑!你這毒婦竟也來了噪舀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤界逛,失蹤者是張志新(化名)和其女友劉穎纺座,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體少欺,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馋贤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年配乓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崎页。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡腰埂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牺荠,到底是詐尸還是另有隱情翁巍,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布挑辆,位于F島的核電站孝情,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏箫荡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一洁奈、第九天 我趴在偏房一處隱蔽的房頂上張望绞灼。 院中可真熱鬧,春花似錦印叁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至税课,卻和暖如春痊剖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陆馁。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工叮贩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佛析,地道東北人彪蓬。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓档冬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酷誓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

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