注:此博客不再更新,所有最新文章将发表在个人独立博客limengting.site。分享技术,记录生活,欢迎大家关注
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.
代码1:Depth-first-search(DFS)递归
class Solution {
public:
int maxDepth(TreeNode* root) {
return root == NULL ? 0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1;
}
};
代码2:Depth-first-search(DFS)非递归,用栈实现
// 为什么不对呢???
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == NULL)
return 0;
int res = 0;
stack<TreeNode*> s; // stack 模板类
s.push(root);
while (!s.empty()) {
++ res;
for (int i = 0, n = s.size(); i < n; ++ i) {
TreeNode* p = s.top();
s.pop();
if (p -> left != NULL)
s.push(p -> left);
if (p -> right != NULL)
s.push(p -> right);
}
}
return res;
}
};
代码3:Breadth-first-search(BFS)非递归用队列
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == NULL)
return 0;
int res = 0;
queue<TreeNode*> q; // queue 模板类
q.push(root);
while (!q.empty()) {
++ res;
// 问:q不是空的吗,只放进去了一个跟节点就知道了q的所有节点个数???
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;
}
};
关于代码2、3的补充:
使用标准库的栈和队列时,先包含相关的头文件
#include<stack>
#include<queue>
// 定义栈如下:
stack<int> s;
// 定义队列如下:
queue<int> q;
栈提供了如下的操作:
s.empty() 如果栈为空返回true,否则返回false
s.size() 返回栈中元素的个数
s.pop() 删除栈顶元素但不返回其值
s.top() 返回栈顶的元素,但不删除该元素
s.push() 在栈顶压入新元素
队列提供了下面的操作:
q.empty() 如果队列为空返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队列首元素但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.push() 在队尾压入新元素
q.back() 返回队列尾元素的值,但不删除该元素