Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
回顾一下深度优先和广度优先吧
- 使用递归的深度优先搜索(一行搞定)
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int maxDepth(TreeNode* root) {
return root == NULL ? 0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1;
}
};
- 广度优先搜索
思想看注释。
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == NULL)
{
return 0;
}
int res = 0;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) {
// 每一次循环都在处理一层
// 对该层的所有节点检查,
// 如果有下一层的节点,就加入队列
res++;
for(int i = 0, n = q.size(); i < n; i++) {
TreeNode* p = q.front();
q.pop();
// 把左右非空节点都放进队列,
// 即下一层节点从左到右所有的节点
if(p -> left != NULL)
q.push(p -> left);
if(p -> right != NULL)
q.push(p -> right);
}
}
return res;
}
};