描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
思路1:递归
1.使用DFS遍历二叉树,使用变量tmpMax记录当前最大深度。
2.每次加深一层则i++,并更新tmpMax的值;每返回一层则i–,这样i将会逐层递增,最终再回到0,tmpMax为最深的层数。
解答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 i = 0,tmpMax=0;
int maxDepth(TreeNode* root) {
if(root == NULL) return 0;
i++;
tmpMax = tmpMax>i?tmpMax:i;
maxDepth(root->left);
maxDepth(root->right);
i--;
return tmpMax;
}
};
思路2
和思路1一样,本质也是递归,只不过省去了临时变量。
解答2
/**
* 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;//递归出口
//这一层递归需要:得到root的左、右子树的最大深度
int maxLeft = maxDepth(root->left);
int maxRight = maxDepth(root->right);
//这一层函数最终需要返回的是左右子树的最大深度加上1(root结点)
return max(maxLeft, maxRight) +1;
}
};