【题目描述】
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
【测试用例】
示例1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例2:
输入:root = [1,null,2]
输出:2
【思路分析】
从根节点到最远的叶子节点的长度,只有两种情况,左子树最长或者右子树最长。所以很明显就要把左子树和右子树分开递归,然后取最长的那一个就是该树的最大深度。
代码逻辑也很简单,如果传入maxDepth函数的节点为空,则返回0;否则分别递归该节点的左右子树,然后比较其递归结果,返回大的那个结果+1。
【参考代码】
C实现
#include <stdio.h>
//easy-104-二叉树的最大深度
int maxDepth(struct TreeNode* root);
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
int maxDepth(struct TreeNode* root) {
if(NULL == root){
return 0;
}
int leftLen = maxDepth(root->left);
int rightLen = maxDepth(root->right);
return leftLen > rightLen ? leftLen+1 : rightLen+1;
}
C++实现
#include <iostream>
using namespace std;
//easy-104-二叉树的最大深度
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution {
public:
int maxDepth(TreeNode* root);
};
int Solution::maxDepth(TreeNode* root){
if(NULL == root){
return 0;
}
int leftLen = maxDepth(root->left);
int rightLen = maxDepth(root->right);
return leftLen > rightLen ? leftLen+1 : rightLen+1;
}