104.二叉树的最大深度
class Solution {
public:
int getheight(TreeNode* node) {
if (node == nullptr) return 0;
int leftheight = getheight(node->left);
int rightheight = getheight(node->right);
int height = 1 + max(leftheight, rightheight);
return height;
}
int maxDepth(TreeNode* root) {
int depth = getheight(root);
return depth;
}
};
#迭代法
class Solution {
public:
int maxDepth(TreeNode* root) {
queue<TreeNode*> que;
int depth = 0;
if (root != nullptr) que.push(root);
while (!que.empty()) {
depth++;
int size = que.size();
for (int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
}
return depth;
}
};
111.二叉树的最小深度
class Solution {
public:
int getheight(TreeNode* node) {
if (node == nullptr) return 0;
int leftheight = getheight(node->left);
int rightheight = getheight(node->right);
if (node->left == nullptr && node->right != nullptr) return 1 + rightheight;
if (node->left != nullptr && node->right == nullptr) return 1 + leftheight;
int result = 1 + min(leftheight, rightheight);
return result;
}
int minDepth(TreeNode* root) {
int depth = getheight(root);
return depth;
}
};
#迭代法
class Solution {
public:
int minDepth(TreeNode* root) {
queue<TreeNode*> que;
int depth = 0;
if (root != nullptr) que.push(root);
while(!que.empty()) {
depth++;
int size = que.size();
while (size--) {
TreeNode* node = que.front();
que.pop();
if (node->left == nullptr && node->right == nullptr) return depth;
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
}
return depth;
}
};
222.完全二叉树的节点个数
class Solution {
public:
int getnum(TreeNode* node) {
if (node == nullptr) return 0;
TreeNode* left = node->left;
TreeNode* right = node->right;
int leftDepth = 0, rightDepth = 0;
while (left) {
left = left->left;
leftDepth++;
}
while (right) {
right = right->right;
rightDepth++;
}
if (leftDepth == rightDepth) return (2 << leftDepth) - 1;
int leftnum = getnum(node->left);
int rightnum = getnum(node->right);
return leftnum + rightnum + 1;
}
int countNodes(TreeNode* root) {
return getnum(root);
}
};