【每日刷题】Day46
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 104. 二叉树的最大深度 - 力扣(LeetCode)
2. 111. 二叉树的最小深度 - 力扣(LeetCode)
3. 222. 完全二叉树的节点个数 - 力扣(LeetCode)
1. 104. 二叉树的最大深度 - 力扣(LeetCode)
//思路:分治思想。将问题拆解为判断左右子树深度大小问题。递归遍历左右子树,将更深的子树+1返回其结果。
int maxDepth(struct TreeNode* root) {
if (root == NULL)
{
return 0;
}
int HighLeft = maxDepth(root->left);
int HighRight = maxDepth(root->right);
return 1 + (HighLeft > HighRight ? HighLeft : HighRight);
}
2. 111. 二叉树的最小深度 - 力扣(LeetCode)
//思路:与二叉树最大深度类似,唯一区别是需要考虑到只有一端有子树的情况。当只有一端有子树时
//寻找更小的子树时就不能用左边的空子树
int minDepth(struct TreeNode* root)
{
if (root == NULL)
{
return 0;
}
int HighLeft = minDepth(root->left);
int HighRight = minDepth(root->right);
int HighMax = HighLeft;
int HighMin = HighRight;
if(HighMax<HighMin)//假设法,假设更大的子树为左子树
{
int tmp = HighMax;//假设有误则更正
HighMax = HighMin;
HighMin = tmp;
}
if(HighMin==0)//考虑只有一端有树的情况
{
return 1+HighMax;
}
return 1+HighMin;
}
3. 222. 完全二叉树的节点个数 - 力扣(LeetCode)
//思路:分治思想。将问题转换为每个左右子树结点个数,将左右子树结点个数相加后再加上根节点即二叉树结点个数
typedef struct TreeNode BT;
//求二叉树结点个数
int TreeNodeSize(BT* node)
{
if (node == NULL)
{
return 0;
}
return 1 + TreeNodeSize(node->left) + TreeNodeSize(node->right);
}
int countNodes(struct TreeNode* root)
{
return TreeNodeSize(root);
}