二叉樹的最大深度
給定一個二叉樹,找出其最大深度。
二叉樹的深度爲根節點到最遠葉子節點的距離。
給出一棵如下的二叉樹:
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;
}
};