EZ
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。
DFS求深度
一行就能搞定。
时间复杂度O(N),空间复杂度(H),H树的高度
dfs之一行代码
/**
* Definition for a binary tree 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 ? max(maxDepth(root->left),maxDepth(root->right)) + 1 : 0;
}
};
层序遍历求层数
前几题都是层序遍历,导致这题一看就先创建了个队列用层序遍历,最后看题解发现dfs一行就能搞定,无数个。。。
时间复杂度O(N),空间复杂度O(L),L为每层最大的个数
层序遍历求层数代码
/**
* Definition for a binary tree 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) {
queue<TreeNode*> q;
if (root) q.push(root);
int dep = 0;
while (q.size()){
dep ++;
int len = q.size();
for (int i = 0 ; i < len ; i ++){
auto t = q.front();
q.pop();
if (t->left) q.push(t->left);
if (t->right) q.push(t->right);
}
}
return dep;
}
};