题目描述
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
图示
额外要求:
1、给定树的节点数范围是 [1, 100]。
2、每个节点的值都是整数,范围为 [0, 99] 。
思路分析
若A == B,B == C,则可以得出,A == C
- 利用传递性,我们可以的出,如果父节点和子节点相同,然后子节点又和他的子节点相同,就可以得出,从父节点到最后一个字节点都是相同的
- 空树不影响单值二叉树
- 可以由上思路,进行递归,根节点与左右子树分别对比,利用 &&,只要有一个不相同就返回false,不然就返回true
样例代码
bool isUnivalTree(TreeNode* root)
{
//空树不影响结果
if(root == NULL)
{
return true;
}
//在查看左右孩子节点的值的时候,有可能会出现左节点或者右节点不存在
//不处理的话会导致对NULL的访问
//因为空节点不影响整棵树,所以赋值方面可以赋值为父节点的值
int left_val = 0;
int right_val = 0;
if(root->left)
{
left_val = root->left->val;
}
else
{
left_val = root->val;
}
if(root->right)
{
right_val = root->right->val;
}
else
{
right_val = root->val;
}
if(root->val == left_val && root->val == right_val)
{
return isUnivalTree(root->left) && isUnivalTree(root->right);
}
else
{
return false;
}
}
总结
本文简单介绍了单值二叉树的解题思路,在力扣以及牛客网中还会有很多类似的题目,今后将会持续更新,敬请关注!