104,二叉树的最大深度
主要思路:按照递归三部曲走
class Solution {
public:
int getDepth(TreeNode* node)
{
if(node==NULL) return 0;
int leftDepth = getDepth(node->left);//左
int rightDepth = getDepth(node->right);//右
int depth = 1 + max(leftDepth,rightDepth);
return depth;
}
int maxDepth(TreeNode* root) {
return getDepth(root);
}
};
//与上面的写法是一样,都是递归的调用
int maxDepth (TreeNode* root) {
if (root == NULL) return 0;
return 1 + max(maxDepth(root->left),maxDepth(root->right));
}
111.二叉树的最小深度
主要思路:与最大深度求解的不同在于,左右空子树的处理过程
class Solution {
public:
int getDepth (TreeNode* node){
if (node == NULL) return 0;
int leftDepth = getDepth (node->left);
int rightDepth = getDepth (node->right);
if (node->left == NULL && node->right != NULL) {
return 1 + rightDepth;
}
if (node->left !=NULL && node->right == NULL) {
return 1 + leftDepth;
}
int result = 1 + min (leftDepth,rightDepth);
return result;
}
int minDepth(TreeNode* root) {
return getDepth (root);
}
};
222.完全二叉树的节点个数
满二叉树是完全二叉树的特殊情况
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode():val(0),left(nullptr),right(nullptr) {}
};
class Solution {
public:
int countNodes(TreeNode* root) {
if (root == NULL) return 0;
TreeNode* left = root->left;
TreeNode* right = root->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;
}//出
//由入到出,这一部分,是为了判断是否存在满二叉树
return countNodes(root->left) + countNodes(root->right) + 1;
}
};