题目(力扣):
判断二叉树上每个节点的值是否相同,就需要让root节点分别与左节点和右节点分别比较是否相同。
注意:root等于空时,直接可以返回true;
首先,先判断他的特殊情况:
当root == NULL时,即可return true;
if (!root)
{
return true;
}
接着,就可以分别去判断root和他的左节点的值是否相同,root和他的右节点的值是否想同。
判左:
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;
}
由于要层层递进的判断每个节点,所以要使用递归遍历到每个节点。
最后,由于所有false情况都已经判断过了,如果有情况上述false都不满足,则最后返回true。
return true;
题目的提交:
完整代码:
bool isUnivalTree(struct TreeNode* root) {
if (!root)
{
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;
}