Leetcode【429宋雏、559、589务豺、590磨总、669】

問(wèn)題描述:【Tree】429. N-ary Tree Level Order Traversal
解題思路:

這道題是給一棵 N 叉樹(shù),層次遍歷將每一層的結(jié)點(diǎn)保存在列表中笼沥。

層次遍歷就是使用隊(duì)列蚪燕,將每一層的地址和層數(shù)保存在隊(duì)列中即可。

Python3 實(shí)現(xiàn):
"""
# Definition for a Node.
class Node:
    def __init__(self, val, children):
        self.val = val
        self.children = children
"""
class Solution:
    def levelOrder(self, root: 'Node') -> List[List[int]]:
        if not root:
            return None
        q, ans = collections.deque(), []
        q.append((root, 1))
        deep = 1
        while q:  # 隊(duì)列不為空奔浅,一直遍歷到為空
            ans.append([])
            while q and q[0][1] == deep: # 相同層
                addr = q.popleft()[0]  # 取該層根結(jié)點(diǎn)地址
                ans[-1].append(addr.val)
                for child in addr.children:  # 將根結(jié)點(diǎn)的孩子放入隊(duì)列
                    q.append((child, deep + 1))
            deep += 1  # 層數(shù)加1
        return ans

問(wèn)題描述:【Tree】559. Maximum Depth of N-ary Tree
解題思路:

這道題是給一個(gè) N 叉樹(shù)馆纳,求最大深度。

二叉樹(shù)的最大深度為 max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1汹桦,拓展到 N 叉樹(shù)鲁驶,只需要對(duì)于 root.children 的每一個(gè)孩子 child (for child in root.children),更新最大深度 ans = max(ans, self.maxDepth(child))舞骆,最后 ans + 1 就是答案钥弯。

Python3 實(shí)現(xiàn):
"""
# Definition for a Node.
class Node:
    def __init__(self, val, children):
        self.val = val
        self.children = children
"""
class Solution:
    def maxDepth(self, root: 'Node') -> int:
        ans = 0  # 最大深度
        if not root:
            return 0
        for child in root.children:
            ans = max(ans, self.maxDepth(child))
        return ans + 1

問(wèn)題描述:【Tree】589. N-ary Tree Preorder Traversal
解題思路:

這道題是給一個(gè) N 叉樹(shù),將前序遍歷的結(jié)果保存在列表中葛作。

前序遍歷:先保存根寿羞,再遞歸孩子 child(for child in root.children)猖凛。

Python3 實(shí)現(xiàn):
"""
# Definition for a Node.
class Node:
    def __init__(self, val, children):
        self.val = val
        self.children = children  # root.children 是以列表的形式存儲(chǔ)的
"""
class Solution:
    def preorder(self, root: 'Node') -> List[int]:
        self.ans = []   # 比將 ans 作為參數(shù)傳入的效率高一些
        self.dfs(root)
        return self.ans
    
    def dfs(self, root):
        if root:
            self.ans.append(root.val)
            for child in root.children:  # root.children 是以列表的形式存儲(chǔ)的
                self.dfs(child)

問(wèn)題描述:【Tree】590. N-ary Tree Postorder Traversal
解題思路:

這道題是給一個(gè) N 叉樹(shù)赂蠢,將后序遍歷的結(jié)果保存在列表中。

思路同上面的 Leetcode 589辨泳。后序遍歷:先遞歸孩子 child(for child in root.children)虱岂,再保存根。

Ptthon3 實(shí)現(xiàn):
"""
# Definition for a Node.
class Node:
    def __init__(self, val, children):
        self.val = val
        self.children = children  # root.children 是以列表的形式存儲(chǔ)的
"""
class Solution:
    def postorder(self, root: 'Node') -> List[int]:
        self.ans = []   # 比將 ans 作為參數(shù)傳入的效率高一些
        self.dfs(root)
        return self.ans
    
    def dfs(self, root):
        if not root:
            return
        for child in root.children:  # root.children 是以列表的形式存儲(chǔ)的
            self.dfs(child)
        self.ans.append(root.val)

問(wèn)題描述:【Tree】669. Trim a Binary Search Tree
解題思路:

這道題是給一棵二叉搜索樹(shù)和一個(gè)區(qū)間 [L,R]菠红,通過(guò)修剪這棵樹(shù)第岖,使得所有結(jié)點(diǎn)的值在 [L,R] 中 (R>=L) 。

  • 當(dāng) root 的值位于 L 和 R 之間试溯,則遞歸修剪其左右子樹(shù)蔑滓,返回 root。
  • 當(dāng) root 的值小于 L遇绞,則其左子樹(shù)的值都小于 L键袱,拋棄左子樹(shù),返回修剪過(guò)的右子樹(shù)摹闽。
  • 當(dāng) root 的值大于 R蹄咖,則其右子樹(shù)的值都大于 R,拋棄右子樹(shù)付鹿,返回修剪過(guò)的左子樹(shù)澜汤。

遞歸的思想就在于我們不用管遞歸內(nèi)部怎么實(shí)現(xiàn)的蚜迅,我們只需要知道遞歸函數(shù)可以完成某種操作,遞歸真正需要關(guān)注的是遞歸的出口和返回值俊抵。因此這道題我們可以想象 self.trimBST(root.right, L, R) 就能修建完右子樹(shù)并返回修剪好的根結(jié)點(diǎn)谁不,同理 self.trimBST(root.left, L, R) 就能修建完左子樹(shù)并返回修剪好的根結(jié)點(diǎn)。

Python3 實(shí)現(xiàn):
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def trimBST(self, root: TreeNode, L: int, R: int) -> TreeNode:
        if not root:
            return None
        if root.val < L:  # 拋棄左子樹(shù)徽诲,返回修剪過(guò)的右子樹(shù)
            return self.trimBST(root.right, L, R)
        if root.val > R:  # 拋棄右子樹(shù)拍谐,返回修剪過(guò)的左子樹(shù)
            return self.trimBST(root.left, L, R)
        root.left = self.trimBST(root.left, L, R)
        root.right = self.trimBST(root.right, L, R)
        return root
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市馏段,隨后出現(xiàn)的幾起案子轩拨,更是在濱河造成了極大的恐慌,老刑警劉巖院喜,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡蓉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喷舀,警方通過(guò)查閱死者的電腦和手機(jī)砍濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)硫麻,“玉大人爸邢,你說(shuō)我怎么就攤上這事∧美ⅲ” “怎么了杠河?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浇辜。 經(jīng)常有香客問(wèn)我券敌,道長(zhǎng),這世上最難降的妖魔是什么柳洋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任待诅,我火速辦了婚禮,結(jié)果婚禮上熊镣,老公的妹妹穿的比我還像新娘卑雁。我一直安慰自己,他們只是感情好绪囱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布测蹲。 她就那樣靜靜地躺著,像睡著了一般毕箍。 火紅的嫁衣襯著肌膚如雪弛房。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天而柑,我揣著相機(jī)與錄音文捶,去河邊找鬼荷逞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粹排,可吹牛的內(nèi)容都是我干的种远。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼顽耳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坠敷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起射富,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤膝迎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胰耗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體限次,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年柴灯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卖漫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赠群,死狀恐怖羊始,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情查描,我是刑警寧澤突委,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站叹誉,受9級(jí)特大地震影響鸯两,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜长豁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忙灼。 院中可真熱鬧匠襟,春花似錦、人聲如沸该园。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)里初。三九已至啃勉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間双妨,已是汗流浹背淮阐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工叮阅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泣特。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓浩姥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親状您。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勒叠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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