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.

大意:

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

思路:

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

代碼(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) {// 有此節(jié)點
            int rightResult;
            int leftResult;
            if (root.left != null) {// 有左節(jié)點
                leftResult = maxDepth(root.left) + 1;
            } else {// 無左節(jié)點
                leftResult = 1;
            }
            if (root.right != null) {// 有右節(jié)點
                rightResult = maxDepth(root.right) + 1;
            } else {// 無右節(jié)點
                rightResult = 1;
            }
            // 判斷哪邊更深,返回更深的深度
            return leftResult > rightResult ? leftResult : rightResult;
        } else {// 無此節(jié)點,返回0
            return 0;
        }
    }
}

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

/**
 * 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;
        }
    }
}

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

// 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


查看作者首頁

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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