题目要求:
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true
;否则返回 false
。
示例 1:
输入:[1,1,1,1,1,null,1] 输出:true示例 2:
输入:[2,2,2,5,2] 输出:false
思路:
分别判断左右子树结点是否为空,在判断左或者右结点与父节点的值是否相等
同时还需要递归遍历判断各个子树是否是单值二叉树
代码实现:
//如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
//只有给定的树是单值二叉树时,才返回 true;否则返回 false。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
};
bool isUnivalTree(struct TreeNode* root)
{
if (root == NULL)
{
return true;
}
//判断左子树
if (root->left)
{
if (root->val != root->left->val || !isUnivalTree(root->left))
{
return false;
}
}
//判断右子树
if (root->right)
{
if (root->val != root->right->val || !isUnivalTree(root->right))
{
return false;
}
}
return true;
}