21-25題

21、從上到下按層打印二叉樹,同一層結點從左至右輸出胡桨。每一層輸出一行。

二叉樹的廣度優(yōu)先遍歷计雌,比較簡單∶钓可以直接用隊列實現白粉。但題目要求每一層輸出一行,還是直接用列表吧鼠渺。

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if not root:
            return []
        all_node = [[root.val]]
        cur_node = [root]
        while cur_node:
            cur_next = []
            for i in cur_node:
                if i.left:
                    cur_next.append(i.left)
                if i.right:
                    cur_next.append(i.right)
            if cur_next:
                cur_node = cur_next
                cur_next = [j.val for j in cur_next]
                all_node.append(cur_next)
            else:
                break
        return all_node

22、之字型打印二叉樹
請實現一個函數按照之字形打印二叉樹眷细,即第一行按照從左到右的順序打印拦盹,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印溪椎,其他行以此類推普舆。
只要在上一題的基礎上改一下,偶數行翻轉一下列表就可以了校读。

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if not root:
            return []
        all_node = [[root.val]]
        cur_node = [root]
        cur_flag = 1
        while cur_node:
            cur_next = []
            for i in cur_node:
                if i.left:
                    cur_next.append(i.left)
                if i.right:
                    cur_next.append(i.right)
            if cur_next:
                cur_flag += 1
                cur_node = cur_next
                cur_next = [j.val for j in cur_next]
                if cur_flag %2 == 0:
                    all_node.append(cur_next[::-1])
                else:
                    all_node.append(cur_next)
            else:
                break
        return all_node

23沼侣、序列化和反序列化二叉樹
開始看到題目有點懵,沒太懂題目的意思歉秫,然后去leetcode里看了一下蛾洛,雖然在leetcode里難度是困難,但其實挺簡單的雁芙,就利用廣度優(yōu)先遍歷一遍轧膘,把值為None的節(jié)點也記錄下來。就可以根據這個序列來反序列化二叉樹了兔甘。
感覺寫反序列化的時候有點麻煩谎碍,后來看了別人的答案,在序列化的時候直接用先序遍歷洞焙,反序列化起來比較方便蟆淀。

class Solution:
    def Serialize(self, root):
        # write code here
        def doit(node):
            if node:
                vals.append(str(node.val))
                doit(node.left)
                doit(node.right)
            else:
                vals.append('#')
        vals = []
        doit(root)
        return ' '.join(vals)

    def Deserialize(self, s):
        # write code here
        def doit():
            val = next(vals)
            if val == '#':
                return None
            node = TreeNode(int(val))
            node.left = doit()
            node.right = doit()
            return node
        vals = iter(s.split())
        return doit()

---------------------
作者:ep_mashiro 
來源:CSDN 
原文:https://blog.csdn.net/tinkle181129/article/details/79326023?utm_source=copy 
版權聲明:本文為博主原創(chuàng)文章,轉載請附上博文鏈接澡匪!

24熔任、數據流中的中位數
設計一個支持以下兩種操作的數據結構:

void addNum(int num) - 從數據流中添加一個整數到數據結構中。
double findMedian() - 返回目前所有元素的中位數仙蛉。

添加數據列表和鏈表都能做到笋敞。考慮到時間復雜度荠瘪,鏈表的插入操作的時間復雜度低于列表夯巷,但是找中位數時赛惩,兩者的時間復雜度都是O(n)級別,leetcode困難的題應該不會這么簡單 趁餐,想了一會也沒想到其它的比較快的辦法喷兼。看了一下別人的答案后雷,用兩個堆實現季惯。不太會,以后再更新

25臀突、二叉平衡樹的第K大節(jié)點
二叉平衡樹的中序遍歷的結果就是一個排序數組勉抓,只要將中序遍歷結果記錄在列表,就可以得到第K大的節(jié)點了候学。

class Solution(object):
    def __init__(self):
        self.vals = []
    
    def kthSmallest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        def midTravel(root):
            if not root:
                return None
            midTravel(root.left)
            self.vals.append(root.val)
            midTravel(root.right)
        midTravel(root)
        return self.vals[k-1]
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末藕筋,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子梳码,更是在濱河造成了極大的恐慌隐圾,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掰茶,死亡現場離奇詭異暇藏,居然都是意外死亡,警方通過查閱死者的電腦和手機濒蒋,發(fā)現死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門盐碱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沪伙,你說我怎么就攤上這事甸各。” “怎么了焰坪?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵趣倾,是天一觀的道長。 經常有香客問我某饰,道長儒恋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任黔漂,我火速辦了婚禮诫尽,結果婚禮上,老公的妹妹穿的比我還像新娘炬守。我一直安慰自己牧嫉,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酣藻,像睡著了一般曹洽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辽剧,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天送淆,我揣著相機與錄音,去河邊找鬼怕轿。 笑死偷崩,一個胖子當著我的面吹牛,可吹牛的內容都是我干的撞羽。 我是一名探鬼主播阐斜,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诀紊!你這毒婦竟也來了智听?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤渡紫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后考赛,有當地人在樹林里發(fā)現了一具尸體惕澎,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年颜骤,在試婚紗的時候發(fā)現自己被綠了唧喉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡忍抽,死狀恐怖八孝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情鸠项,我是刑警寧澤干跛,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站祟绊,受9級特大地震影響楼入,放射性物質發(fā)生泄漏。R本人自食惡果不足惜牧抽,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一嘉熊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扬舒,春花似錦阐肤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愧薛。三九已至,卻和暖如春诊赊,著一層夾襖步出監(jiān)牢的瞬間厚满,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工碧磅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碘箍,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓鲸郊,卻偏偏與公主長得像丰榴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秆撮,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容

  • 樹 記錄《劍指offer》中所有關于樹的題目四濒,以及LeetCode中的相似題目。 相關題目列表 題目 樹是一種最常...
    wenmingxing閱讀 1,411評論 2 13
  • 題量有點多职辨,建議Ctrl + F題號或題目哦~ 二叉樹的遍歷(前序遍歷盗蟆,中序遍歷,后序遍歷)[144] Binar...
    野狗子嗷嗷嗷閱讀 9,082評論 2 37
  • 第一章 緒論 什么是數據結構舒裤? 數據結構的定義:數據結構是相互之間存在一種或多種特定關系的數據元素的集合喳资。 第二章...
    SeanCheney閱讀 5,744評論 0 19
  • 天安門 莊嚴肅穆 英姿颯爽 故宮 二逼屬性已激活 大氣磅礴 天壇 老貓祭天 法力無邊 長城 飛龍在天 神龍擺尾 二...
    言字訣閱讀 373評論 0 0
  • 雖然昨天做了準備,還寫了預演講稿腾供,但今天還是沒有做好演講仆邓。 原因如下: 第一,忘記錄音伴鳖。已經站起來走了兩步才想起來...
    huifang963閱讀 352評論 0 0