LeetCode #104 Maximum Depth of Binary Tree 二叉樹(shù)的最大深度

104 Maximum Depth of Binary Tree 二叉樹(shù)的最大深度

Description:
Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

Note: A leaf is a node with no children.

Example:

Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its depth = 3.

題目描述:
給定一個(gè)二叉樹(shù)盖桥,找出其最大深度。

二叉樹(shù)的深度為根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的最長(zhǎng)路徑上的節(jié)點(diǎn)數(shù)题翻。

說(shuō)明: 葉子節(jié)點(diǎn)是指沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)揩徊。

示例:

給定二叉樹(shù) [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

思路:

主體思想是采用DFS(深度優(yōu)先搜索)

  1. 遞歸, 最大深度是左右子樹(shù)中的較大值, 每次遞歸子節(jié)點(diǎn)的時(shí)候 +1
  2. 迭代, 采用堆棧, 逐層掃描, 每到新的一層 +1
    時(shí)間復(fù)雜度O(n), 空間復(fù)雜度O(n), 其中 n為樹(shù)中的結(jié)點(diǎn)數(shù), 因?yàn)槊總€(gè)結(jié)點(diǎn)都要訪問(wèn)一次

DFS(深度優(yōu)先搜索)

深度優(yōu)先搜索算法(英語(yǔ):Depth-First-Search塑荒,DFS)是一種用于遍歷或搜索樹(shù)算法
沿著樹(shù)的深度遍歷樹(shù)的節(jié)點(diǎn)熄赡,盡可能深的搜索樹(shù)的分支。
當(dāng)節(jié)點(diǎn)v的所在邊都己被探尋過(guò)袜炕,搜索將回溯到發(fā)現(xiàn)節(jié)點(diǎn)v的那條邊的起始節(jié)點(diǎn)本谜。
這一過(guò)程一直進(jìn)行到已發(fā)現(xiàn)從源節(jié)點(diǎn)可達(dá)的所有節(jié)點(diǎn)為止。
如果還存在未被發(fā)現(xiàn)的節(jié)點(diǎn)偎窘,則選擇其中一個(gè)作為源節(jié)點(diǎn)并重復(fù)以上過(guò)程乌助,整個(gè)進(jìn)程反復(fù)進(jìn)行直到所有節(jié)點(diǎn)都被訪問(wèn)為止。屬于盲目搜索陌知。
步驟:

  1. 首先將根節(jié)點(diǎn)放入堆棧中他托。
  2. 從堆棧中取出第一個(gè)節(jié)點(diǎn),并檢驗(yàn)它是否為目標(biāo)仆葡。如果找到目標(biāo)赏参,則結(jié)束搜尋并回傳結(jié)果。否則將它某一個(gè)尚未檢驗(yàn)過(guò)的直接子節(jié)點(diǎn)加入堆棧中沿盅。
  3. 重復(fù)步驟2把篓。
  4. 如果不存在未檢測(cè)過(guò)的直接子節(jié)點(diǎn)。將上一級(jí)節(jié)點(diǎn)加入堆棧中腰涧。重復(fù)步驟2韧掩。
  5. 重復(fù)步驟4。
  6. 若堆棧為空窖铡,表示整張圖都檢查過(guò)了——亦即圖中沒(méi)有欲搜尋的目標(biāo)疗锐。結(jié)束搜尋并回傳“找不到目標(biāo)”。

代碼:
C++:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
 /**
  * Definition for a binary tree node.
  * struct TreeNode {
  *     int val;
  *     TreeNode *left;
  *     TreeNode *right;
  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  * };
  */
 class Solution 
 {
 public:
     int maxDepth(TreeNode* root) 
     {
         if (!root) return 0;
         queue<TreeNode*> q;
         q.push(root);
         int result = 0;
         while (!q.empty()) 
         {
             int n = q.size();
             while (n-- > 0) 
             {
                 TreeNode* cur = q.front();
                 q.pop();
                 if (cur -> left) q.push(cur -> left);
                 if (cur -> right) q.push(cur -> right);
             }
             ++result;
         }
         return result;
     }
 };

Java:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        return root == null ? 0 : Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
    }
}

Python:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1 if root else 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末费彼,一起剝皮案震驚了整個(gè)濱河市滑臊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箍铲,老刑警劉巖雇卷,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颠猴,居然都是意外死亡聋庵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門芙粱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祭玉,“玉大人,你說(shuō)我怎么就攤上這事春畔⊥鸦酰” “怎么了岛都?”我有些...
    開(kāi)封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)振峻。 經(jīng)常有香客問(wèn)我臼疫,道長(zhǎng),這世上最難降的妖魔是什么扣孟? 我笑而不...
    開(kāi)封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任烫堤,我火速辦了婚禮,結(jié)果婚禮上凤价,老公的妹妹穿的比我還像新娘鸽斟。我一直安慰自己,他們只是感情好利诺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布富蓄。 她就那樣靜靜地躺著,像睡著了一般慢逾。 火紅的嫁衣襯著肌膚如雪立倍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天侣滩,我揣著相機(jī)與錄音口注,去河邊找鬼。 笑死君珠,一個(gè)胖子當(dāng)著我的面吹牛寝志,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葛躏,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悠菜!你這毒婦竟也來(lái)了舰攒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悔醋,失蹤者是張志新(化名)和其女友劉穎摩窃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芬骄,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猾愿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了账阻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒂秘。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淘太,靈堂內(nèi)的尸體忽然破棺而出姻僧,到底是詐尸還是另有隱情规丽,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布撇贺,位于F島的核電站赌莺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏松嘶。R本人自食惡果不足惜艘狭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翠订。 院中可真熱鬧巢音,春花似錦、人聲如沸蕴轨。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)橙弱。三九已至歧寺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棘脐,已是汗流浹背斜筐。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛀缝,地道東北人顷链。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屈梁,于是被迫代替她去往敵國(guó)和親嗤练。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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