day16打卡
- 递归法
- 时间复杂度:O(N),空间复杂度:O(N)
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr) return 0;
return 1 + max(maxDepth(root->left), maxDepth(root->right));
}
};
- 迭代法
- 时间复杂度:O(N),空间复杂度:O(N)
class Solution {
public:
int maxDepth(TreeNode* root) {
queue<TreeNode*> q;
if(root != nullptr) q.push(root);
int depth = 0;
while(!q.empty())
{
int size = q.size();
depth++;
for(int i = 0 ; i < size; i++)
{
TreeNode* top = q.front();
q.pop();
if(top->left) q.push(top->left);
if(top->right) q.push(top->right);
}
}
return depth;
}
};
- 递归法
- 时间复杂度:O(N),空间复杂度:O(N)
注意最小深度即可。
class Solution {
public:
int minDepth(TreeNode* root) {
if(root == nullptr) return 0;
if(root->left == nullptr && root->right != nullptr)
{
return 1 + minDepth(root->right);
}
if(root->left != nullptr && root->right == nullptr)
{
return 1 + minDepth(root->left);
}
return 1 + min(minDepth(root->left), minDepth(root->right));
}
};
- 迭代法
- 时间复杂度:O(N),空间复杂度:O(N)
注意左右节点都为空时就是叶子节点,此时返回depth即可
class Solution {
public:
int minDepth(TreeNode* root) {
queue<TreeNode*> q;
if(root != nullptr) q.push(root);
int depth = 0;
while(!q.empty())
{
int size = q.size();
depth++;
for(int i = 0 ; i < size; i++)
{
TreeNode* top = q.front();
q.pop();
if(top->left) q.push(top->left);
if(top->right) q.push(top->right);
if(top->left == nullptr && top->right == nullptr) return depth;
}
}
return depth;
}
};
-
递归法
-
时间复杂度:O(N),空间复杂度:O(N)
class Solution {
public:
int countNodes(TreeNode* root) {
if(root == nullptr) return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
};
- 迭代法
- 时间复杂度:O(N),空间复杂度:O(N)
class Solution {
public:
int countNodes(TreeNode* root) {
queue<TreeNode*> q;
if(root != nullptr) q.push(root);
int count = 0;
while(!q.empty())
{
int size = q.size();
for(int i = 0 ; i < size; i++)
{
TreeNode* top = q.front();
q.pop();
count++;
if(top->left) q.push(top->left);
if(top->right) q.push(top->right);
}
}
return count;
}
};
->left) q.push(top->left);
if(top->right) q.push(top->right);
}
}
return count;
}
};