本篇博客会讲解力扣“965. 单值二叉树”的解题思路,这是题目链接。
先来审题:
以下是输出示例:
以下是提示:
本题非常适合使用递归实现。分以下情况讨论:
- 若是空树,则符合单值二叉树的性质。
- 若非空,先看左、右子结点是否和根结点相等,若不相等,则不是单值二叉树。
- 若非空,且左、右子结点都和根节点相等,则判断左、右子树是不是单值二叉树(转换为子问题)。
代码实现如下:
bool isUnivalTree(struct TreeNode* root){
// 空树
if (root == NULL)
{
return true;
}
// 判断和左子结点和右子结点是否相等
if ((root->left && root->val != root->left->val)
|| (root->right && root->val != root->right->val))
{
return false;
}
// 左子树和右子树是否是单值
return isUnivalTree(root->left) && isUnivalTree(root->right);
}
通过喽。
总结
使用递归和分类讨论的思想,分情况讨论,把大事化小。
感谢大家的阅读!