题目如下:
思路
对于这道题, 我会采用递归的解法.
看着对称的二叉树,
写下判断对称的条件,
再进入递归即可.
值得注意的是,
代码中会有两个函数,
第一个是isSymmetric,第二个是judge.
因为这里会考虑到一种特殊情况,
那就是
二叉树的根结点(最上面的那个),它会单独用isSymmetric判断一下,
judge则用来判断根节点的左右两边结点的对称.
代码中有具体注释,请大家看代码.
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//注意传参,比较的是一个节点的左右子树
bool judge(struct TreeNode*left,struct TreeNode*right)
{
if(left==NULL&&right==NULL)
{
return true;
}
if(left==NULL||right==NULL)
{
return false;
}
if(left->val!=right->val)
{
return false;
}
//再次注意传参,由示例的图可知传参参数的对称性
return judge(left->left,right->right)&&judge(left->right,right->left);
}
bool isSymmetric(struct TreeNode* root) {
//空树对称返回true
if(root==NULL)
{
return true;
}
//左右子树都为空
if(root->left==NULL&&root->right==NULL)
{
return true;
}
//左右子树中有一颗不为空
if(root->left==NULL||root->right==NULL)
{
return false;
}
//判断是否对称
if(root->left->val!=root->right->val)
{
return false;
}
//进入递归
return judge(root->left,root->right);
}