二叉樹(shù) 0 (二叉樹(shù)最大深度 leetcode 104)

思想

二叉樹(shù)的核心思想是分治和遞歸辰如,特點(diǎn)是遍歷方式怎栽。
解題方式常見(jiàn)兩類(lèi)思路:

  1. 遍歷一遍二叉樹(shù)尋找答案颊亮;
  2. 通過(guò)分治分解問(wèn)題尋求答案剔宪;

遍歷分為前中后序拂铡,本質(zhì)上是遍歷二叉樹(shù)過(guò)程中處理每個(gè)節(jié)點(diǎn)的三個(gè)特殊時(shí)間點(diǎn):

  1. 前序是在剛剛進(jìn)入二叉樹(shù)節(jié)點(diǎn)時(shí)執(zhí)行;
  2. 后續(xù)是在將要離開(kāi)二叉樹(shù)節(jié)點(diǎn)時(shí)執(zhí)行葱绒;
  3. 中序是左子樹(shù)遍歷完進(jìn)入右子樹(shù)前執(zhí)行感帅;
# 前序
     1 node
    /      \
 2 left   3 right
中左右
 
# 中序
     2 node
    /      \
 1 left    3 right
左中右
 
# 后序
     3 node
    /      \
 1 left    2 right     
左右中       

多叉樹(shù)只有前后序列遍歷,因?yàn)橹挥卸鏄?shù)有唯一一次中間節(jié)點(diǎn)的遍歷

題目的關(guān)鍵就是找到遍歷過(guò)程中的位置地淀,插入對(duì)應(yīng)代碼邏輯實(shí)現(xiàn)場(chǎng)景的目的失球。

實(shí)例

二叉樹(shù)最大深度 leetcode 104

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

輸入:
root: TreeNode,二叉樹(shù)的根節(jié)點(diǎn)

輸出:
int骚秦,二叉樹(shù)的最大深度

舉例:
給定二叉樹(shù) [3,9,20,None,None,15,7]她倘,最大深度返回 3.

二叉樹(shù)的數(shù)據(jù)存儲(chǔ)可以使用鏈表,也可以使用數(shù)組作箍,往往數(shù)組更容易表達(dá),根節(jié)點(diǎn)從 index=1 處開(kāi)始存儲(chǔ)前硫,浪費(fèi) index=0 的位置
left_child = 2 * parent
right_child = 2 * parent + 1
parent = child // 2

    3
   / \
  9  20
    /  \
   15   7

遍歷解

用一個(gè)變量記錄最大深度胞得,遍歷一遍樹(shù),取得最大深度屹电。前序位置進(jìn)入新一層當(dāng)前深度 +1阶剑,后序位置返回上一層當(dāng)前深度 -1.

分治解

二叉樹(shù)的最大深度等于子樹(shù)的最大深度 +1

編碼


from typing import Optional


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def maximum_depth_of_binary_tree_traverse(root: Optional[TreeNode]) -> int:
    # 全局變量初始化
    cur_depth, max_depth = 0, 0

    def traverse(root: TreeNode):
        nonlocal cur_depth, max_depth
        # 遞歸終止條件
        if root is None:
            return
        # 前序位置進(jìn)入新一層
        cur_depth += 1
        max_depth = max(cur_depth, max_depth)
        traverse(root.left)
        traverse(root.right)
        # 后序位置返回上一層
        cur_depth -= 1

    traverse(root)
    return max_depth


def maximum_depth_of_binary_tree_recursive(root: Optional[TreeNode]) -> int:
    # 遞歸終止條件跃巡,root 為 None,此時(shí)深度為 0
    if root is None:
        return 0
    left_max_depth = maximum_depth_of_binary_tree_recursive(root.left)
    right_max_depth = maximum_depth_of_binary_tree_recursive(root.right)
    # 當(dāng)前最大深度是左右子樹(shù)最大深度較大值 +1
    return max(left_max_depth, right_max_depth) + 1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牧愁,一起剝皮案震驚了整個(gè)濱河市素邪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猪半,老刑警劉巖兔朦,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異磨确,居然都是意外死亡沽甥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)乏奥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)摆舟,“玉大人,你說(shuō)我怎么就攤上這事邓了『抻眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵骗炉,是天一觀(guān)的道長(zhǎng)胡野。 經(jīng)常有香客問(wèn)我,道長(zhǎng)痕鳍,這世上最難降的妖魔是什么硫豆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮笼呆,結(jié)果婚禮上熊响,老公的妹妹穿的比我還像新娘。我一直安慰自己诗赌,他們只是感情好汗茄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著铭若,像睡著了一般洪碳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叼屠,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天瞳腌,我揣著相機(jī)與錄音,去河邊找鬼镜雨。 笑死嫂侍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挑宠,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菲盾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了各淀?” 一聲冷哼從身側(cè)響起懒鉴,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碎浇,沒(méi)想到半個(gè)月后临谱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡南捂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吴裤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溺健。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡麦牺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞭缭,到底是詐尸還是另有隱情剖膳,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布岭辣,位于F島的核電站吱晒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沦童。R本人自食惡果不足惜仑濒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偷遗。 院中可真熱鬧墩瞳,春花似錦、人聲如沸氏豌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)泵喘。三九已至泪电,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纪铺,已是汗流浹背相速。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霹陡,地道東北人和蚪。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓止状,卻偏偏與公主長(zhǎng)得像烹棉,于是被迫代替她去往敵國(guó)和親攒霹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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