题目描述:
思路:首先考虑这题应该用递归的方法,拿到这题的时候无从下手,我们想要如何判断一颗二叉树是否左右对称,我们想到的是这个树根节点的左子树要对称于根节点的右子树,怎么样才能保证左右子树对称呢,也就是说如果整棵树只有左子树没有右子树那么这棵树肯定不对称,空树也是对称的,如果左右子树都存在的时候我们还要考虑的就是结点的对称位置的值是否相等即任意两个对称位置的根节点值要相等且左树的左子结点等于右树的右子节点。这句话大家可能看不明白但是大家看一下图就能理解啥意思了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool help(struct TreeNode* root1,struct TreeNode* root2)
{
if(root1==NULL&&root2==NULL)
return true;
if(root1==NULL||root2==NULL)
return false;
return (root1->val==root2->val)&&help(root1->left,root2->right)&&help(root1->right,root2->left);
}
bool isSymmetric(struct TreeNode* root){
return help(root,root);
}
结果: