LeetCode 104.二叉樹的最大深度

s_Shune發表於2020-09-26

LeetCode 104.二叉樹的最大深度

題目描述

給定一個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:
給定二叉樹 [3,9,20,null,null,15,7],

在這裡插入圖片描述

返回它的最大深度 3 。

解題

自下而上遞迴

    設計這樣一個遞迴函式,它能返回當前節點的最大深度,如果當前節點為NULL,返回0,否則當前節點的最大深度為其左右子節點對遞迴函式的呼叫結果的最大值+1,這種是自下而上的方法,它先計運算元節點的最大深度,層層向上。

/**
 * 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==NULL) return 0;
        return max(maxDepth(root->left), maxDepth(root->right))+1;
    }
};

自上而下遞迴

    這種思路就是從上向下,從根節點出發,我們知道當前父節點的深度,那麼如果子節點不為NULL,則深度+1,繼續向下傳遞,直到當前節點為空,即父節點為葉節點,如果當前深度比儲存的最大深度要大,則對最大深度更新,最終返回儲存的最大深度。

/**
 * 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 {
private:
    int maxD = 0;
public:
    int maxDepth(TreeNode* root, int curD=0) {
        if (root!=NULL){
            maxDepth(root->left, curD+1);
            maxDepth(root->right, curD+1);
        }
        else        
            maxD = max(curD, maxD);
        return maxD;
    }
};

相關文章