题目地址:牛客网
描述
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如: 下面这棵二叉树是对称的
下面这棵二叉树不对称。
数据范围:节点数满足 0≤n≤1000,节点上的值满足 |val| ≤1000
要求:空间复杂度 O(n),时间复杂度 O(n)
备注:
你可以用递归和迭代两种方法解决这个问题
示例1
输入:
{1,2,2,3,4,4,3}
返回值:
true
示例2
输入:
{8,6,9,5,7,7,5}
返回值:
false
思路:
用递归的方法判断,左树的左边和右树的右边&&左树的右边和右树的左边,以及一些特殊条件。
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool same(TreeNode* t1,TreeNode* t2)
{
if(!t1&&!t2)return true;
if(!t1||!t2)return false;
if(t1->val!=t2->val)return false;
return same(t1->left,t2->right)&&same(t1->right,t2->left);
}
bool isSymmetrical(TreeNode* pRoot) {
if(!pRoot)return true;
return same(pRoot,pRoot);
}
};