T1 单值二叉树判断
bool flag = true;
void PreOrderCompare(struct TreeNode* root, int val)
{
if (NULL == root || false == flag)
return;
if (root->val != val)
{
flag = false;
return;
}
PreOrderCompare(root->left, val);
PreOrderCompare(root->right, val);
}
bool isUnivalTree(struct TreeNode* root)
{
if (NULL == root)
return true;
flag = true;
PreOrderCompare(root, root->val);
return flag;
}
bool isUnivalTree(struct TreeNode* root)
{
if (NULL == root)
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);
}
T2 相同二叉树判断
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if (NULL == p && NULL == q)
return true;
if (NULL == p || NULL == q)
return false;
if (p->val != q->val)
return false;
return isSameTree(p->left, q->left)
&& isSameTree(p->right, q->right);
}
T3 对称二叉树判断
bool isSymmetricSubTree(struct TreeNode* root1, struct TreeNode* root2)
{
if (NULL == root1 && NULL == root2)
return true;
if (NULL == root1 || NULL == root2)
return false;
if (root1->val != root2->val)
return false;
return isSymmetricSubTree(root1->left, root2->right)
&& isSymmetricSubTree(root1->right, root2->left);
}
bool isSymmetric(struct TreeNode* root)
{
if (NULL == root)
return true;
return isSymmetricSubTree(root->left, root->right);
}