二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的距离。
样例
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最大深度为3
.
分析:这道题因为是树,所以基本递归可以解决,另外采用深度优先搜索DFS,特别简单。不过我没有想到,还是对树和递归用的不熟啊
/**
* Definition for binary tree
* 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) return 0;
int leftDepth = maxDepth(root -> left) + 1;
int rightDepth = maxDepth(root -> right) + 1;
return max(leftDepth, rightDepth);
}
};
第二种方法,使用循环遍历二叉树,即广度优先搜需,算总层数
class Solution {
public:
int maxDepth(TreeNode *root) {
if (root == NULL)
return 0;
int res = 0;
queue<TreeNode *>q;//这里不要用错为queue<TreeNode *>*q,这样q指向的是queue<TreeNode *>类型 ,而不是存储TreeNode *的容器
q.push(root);
while (!q.empty())
{
res++;//循环一次即代表一层深度
int n = q.size();
for (int i = 0; i<n; i++)//把同一深度的统统入栈
{
TreeNode * tmp = q.front();
q.pop();
if (tmp->left) q.push(tmp->left);
if (tmp->right)q.push(tmp->right);
}
}
return res;
}
};