解题思路:
\qquad
最大深度可以想到使用DFS(深度优先)或BFS(广度优先)来解决。
\qquad
DFS:一般用 递归 or 迭代+栈。递归实现较为简单。
\qquad
BFS:一般用 迭代+队列。
DFS:
\qquad
对于每个节点,将左子树的最大深度与右子树的最大深度比较,选取较大值+1,即为当前节点树的最大深度。空节点的最大深度为0.
int maxDepth(TreeNode* root) {
if(!root)
{
return 0;
}
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
BFS:
\qquad
从根节点开始,每次将同深度的节点加入队列,再遍历队列节点,将其左右子节点加入队列。来计算深度。
\qquad
再次回顾C++STL 队列数据结构queue的用法。
Queue | First In First Out(FIFO) | 复杂度 |
---|---|---|
push() | 队尾添加一个元素 | O(1) |
pop() | 队首移除一个元素(若空队列会报错) | O(1) |
front() | 查看队首元素 | O(1) |
back() | 查看队尾元素 | O(1) |
size() | 队列元素数量 | O(1) |
empty() | 队列是否为空(空队列为 True) | O(1) |
int maxDepth(TreeNode* root) {
if(!root) return 0;
int num = 0, cnt = 0;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
num = q.size();
cnt++;
while(num > 0)
{
TreeNode* node = q.front();
q.pop();
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
num--;
}
}
return cnt;
}
STL时间复杂度总结 https://blog.csdn.net/2302_79440616/article/details/139326935