一、題目解析
這里需要注意根節點的深度是1,也就是說計算深度的是從1開始計算的
?
?二、算法原理
解法1:廣度搜索,使用隊列
解法2:深度搜索,使用遞歸
當計算出左子樹的深度l,與右子樹的深度r時,總的深度為max(l,r)+1
當root == nullptr時,返回0,此時該節點遞歸返回的值是1,然后依次返回
先遞歸我們的左樹,?此時根節點為B,B在遞歸,左樹為空,右樹也為空,此時B樹的深度為max(0,0)+1=1,然后B樹遞歸完,繼續遞歸右樹C,C為根節點繼續遞歸,C的左樹D繼續遞歸,D的左右子樹為空,D遞歸結果為1返回,C的右樹為空返回0,此時C樹的深度為max(1,0)+1=2,C的深度為2,A的深度為B,C子樹的最大值加1,所以最終遞歸結果為3。
在遞歸時,需要我們自己去畫遞歸展開圖去體會遞歸的過程,這里受限于篇幅原因,將遞歸展開圖壓縮了。
三、代碼示例
class Solution {
public:int maxDepth(TreeNode* root) {if(root == nullptr) return 0;return max(maxDepth(root->left),maxDepth(root->right))+1; }
};
代碼很簡短,但重要的是了解遞歸展開的邏輯,明白為啥這樣能得出正確答案。
?
?
看到最后,如果對您有所幫助,還請點贊、收藏和關注,點點關注不迷路,我們下期再見!?