題目
給定一個二叉樹,找出其最大深度。
二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
思路
首先,深度是什麼?
你可以理解爲,一棵樹的深度就是根節點到離它最遠的葉子節點的距離。
我們也就定義一個節點的深度就是它自己到離它最遠的葉子節點的距離。(需要注意的是,葉子節點到葉子節點的距離我們定義爲1)
綜上,題目給了我們該樹的根節點,所以,如果根節點爲空,則該樹的深度爲0,直接返回就可以了。
那麼,如果不滿足這個條件,該如何返回該樹的最大深度呢?
這就要引出遞推式了:
一個節點的深度 = max(左兒子的深度,右兒子的深度) + 1;
——這裏的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; //如果根節點爲空,則該樹的深度爲0
else return max(MaxDeep(root -> left), MaxDeep(root -> right)) + 1;
}//maxDepth()函數是題目自帶的函數
int MaxDeep(TreeNode* node) {
if(node == NULL) return 0; //如果這個節點本身就爲空,那他到葉子節點的距離爲0
else return max(MaxDeep(node -> left), MaxDeep(node -> right)) + 1;
}//MaxDeep()函數遞歸函數
};