【LeetCode热题100】104. 二叉树的最大深度(二叉树)
一.题目要求
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
二.题目难度
简单
三.输入样例
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
提示:
树中节点的数量在
[
0
,
1
0
4
]
[0, 10^4]
[0,104]区间内。
-100 <= Node.val <= 100
四.解题思路
解法1:DFS后序遍历求深度
解法2:BFS层序遍历,从root开始将每层结点的左右孩子加入,处理完一层depth++,直到队列空。
五.代码实现
DFS
/**
* Definition for a binary tree node.
* 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) {
if(!root) return 0;
//后序遍历
//左子树
int left = maxDepth(root->left);
//右子树
int right = maxDepth(root->right);
//求深度
return left > right ? left + 1 : right + 1;
}
};
BFS
/**
* Definition for a binary tree node.
* 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) {
if(!root) return 0;
queue<TreeNode*> treeq;
int depth = 0;
treeq.push(root);
while(!treeq.empty())
{
int remained = treeq.size();
while(remained > 0)
{
TreeNode* tmp = treeq.front();
treeq.pop();
remained--;
if (tmp->left != nullptr) treeq.push(tmp->left);
if (tmp->right != nullptr) treeq.push(tmp->right);
}
depth++;
}
return depth;
}
};
六.题目总结
用单栈可否实现后序遍历求深度