对称二叉树(力扣101)
题目如下:
思路
对于这道题, 我会采用递归的解法.
看着对称的二叉树,
写下判断对称的条件,
再进入递归即可.
值得注意的是,
代码中会有两个函数,
第一个是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) {//空树对称返回trueif(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);
}