题目
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
示例 2:
输入:root = [1,null,2] 输出:2
C++代码
#include <iostream>
using namespace std;
//创建二叉树结构体
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) {}
};
/*
* 二叉树的最大深度问题
* 二叉树的最大深度:max(l+r)+1,l为左子树的最大深度,r为右子树的最大深度
* 运用迭代求出左右子树的最大深度并求最后的解
*/
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
int main() {
TreeNode* t1 = new TreeNode(3);
TreeNode* t2 = new TreeNode(9);
TreeNode* t3 = new TreeNode(20);
TreeNode* t4 = new TreeNode(15);
TreeNode* t5 = new TreeNode(7);
t1->left = t2;
t1->right = t3;
t2->left = nullptr;
t2->right = nullptr;
t3->left = t4;
t3->right = t5;
t4->left = nullptr;
t4->right = nullptr;
t5->left = nullptr;
t5->right = nullptr;
TreeNode* root = t1;
int ans = maxDepth(root);
cout << ans << endl;
delete t1, t2, t3, t4, t5;
return 0;
}
分析
二叉树的最大深度问题,我们知道二叉树的最大深度:max(l+r)+1,l 为左子树的最大深度,r 为右子树的最大深度,那么可以运用迭代求出左右子树的最大深度并求最后的解。
问题
第一次写二叉树,二叉树的定义、初始化和链表相似。