提示:
这个题目我们通过分治思想来解题:
首先传入的是根节点
其次判断根节点是否有左子树和右子树,若存在则判断左右子树的值是否于根节点的值相同(不同则返回false,相同则继续)
if(root->left && root->left->val != root->val
{
return false;
}
if(root->right && root->right->val != root->val
{
return false;
}
若正确,则继续向下递归,但是由于此题目要求返回true
or flase
,所以,我们需要返回
return isUnivalTree(root->left) &&
isUnivalTree(root->right);
因为是左右子树都必须满足,所以是 &&
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isUnivalTree(struct TreeNode* root) {
if(root == NULL)
{
return true;
}
if(root->left && root->left->val != root->val)
{
return false;
}
if(root->right && root->right->val != root->val)
{
return false;;
}
return isUnivalTree(root->left) &&
isUnivalTree(root->right);
}