LeetCode筆記:104.Maximum Depth of Binary Tree

問題:

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.

大意:

給出一個二叉樹,找到其最大的深度。
最大深度是指從根節點到最遠的葉子節點的最長距離的節點數。

思路:

要探索二叉樹的深度,用遞歸比較方便。我們題目要求的函數返回根節點的深度,那么就做到對二叉樹上每個節點調用此函數都返回其作為根節點看待時的深度。比如,所有葉子節點的深度都是1,再往上就是2、3...一直到root根節點的返回值就是最大的深度。
對于每個節點,我們先判斷其本身是否是節點,如果是一個空二叉樹,那么就應該返回0。
然后,我們定義兩個變量,一個左節點深度,一個右節點深度。我們分別判斷其有無左節點和右節點,兩種節點中的做法都是一樣的,假設沒有左節點,那么就左節點深度變量就是1,有左節點的話,左節點深度變量就是對左節點調用此函數返回的結果加1;對右節點也做同樣的操作。
最后比較左節點深度和右節點深度,判斷誰比較大,就返回哪個變量。這樣就能一層一層地遞歸獲取最大深度了。

代碼(Java):

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int maxDepth(TreeNode root) {
        if (root != null) {// 有此節點
            int rightResult;
            int leftResult;
            if (root.left != null) {// 有左節點
                leftResult = maxDepth(root.left) + 1;
            } else {// 無左節點
                leftResult = 1;
            }
            if (root.right != null) {// 有右節點
                rightResult = maxDepth(root.right) + 1;
            } else {// 無右節點
                rightResult = 1;
            }
            // 判斷哪邊更深,返回更深的深度
            return leftResult > rightResult ? leftResult : rightResult;
        } else {// 無此節點,返回0
            return 0;
        }
    }
}

不過我們稍加思考一下,就可以進一步簡略一下代碼。因為我們代碼里對于root為null的情況下返回的是0,那其實沒有左節點時,對齊使用函數返回的也會是0,加1的話就是我們需要的1了,所以其實不用判斷有無左節點,右節點也是一樣。所以可以簡化如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int maxDepth(TreeNode root) {
        if (root != null) {
            int rightResult = maxDepth(root.left) + 1;
            int leftResult = maxDepth(root.right) + 1;
            return leftResult > rightResult ? leftResult : rightResult;
        } else {
            return 0;
        }
    }
}

也可以額外寫個函數,在參數里傳遞深度。

// C++:
/**
 * 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 depth(TreeNode* node, int level) {
        if (node == NULL) return level-1;
        
        int left = depth(node->left, level+1);
        int right = depth(node->right, level+1);
        
        return max(left, right);
    }
    
    int maxDepth(TreeNode* root) {
        return depth(root, 1);
    }
};

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容

  • 參考兩篇其他bolg總結的二叉樹:https://github.com/xy7313/lintcode/blob/...
    暗黑破壞球嘿哈閱讀 2,390評論 0 1
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,473評論 1 31
  • 94. Binary Tree Inorder Traversal 中序 inorder:左節點->根節點->右節...
    Morphiaaa閱讀 562評論 0 0
  • 二叉樹的定義#### 二叉樹是n(n>=0)個具有相同類型的元素的有限集合,當n=0時稱為空二叉樹,當n>0時,數...
    kylinxiang閱讀 1,416評論 0 2
  • 感悟:昨天岳父來了,喝了酒和我聊了好久,提起當初我結婚時說的承諾,我早就忘了,可他還記得,這個世界上父愛是最偉大的...
    liuxu火火火閱讀 151評論 0 0