题目描述
给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
1↵ / ↵ 2 2↵ / / ↵3 4 4 3↵
下面这棵二叉树不对称。
1↵ / ↵ 2 2↵ ↵ 3 3
备注:
如果你用递归和迭代两种方法解决这个问题的话,可以得到附加分。
如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读
我们用如下方法将二叉树序列化:
二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。
例如:
1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5
上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".
解题思路
利用递归进行比较,先进行基本判断,然后通过递归左孩子的右子树和右孩子的左子树,右孩子的左子树和左孩子的右子树,两组进行比较。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode *root) {
if(root == NULL)
return true;
return cmp(root->left, root->right);
}
bool cmp(TreeNode *left, TreeNode *right){
if(left == NULL && right == NULL)
return true;
else if(left == NULL && right || left && right == NULL)
return false;
else if(left->val != right->val)
return false;
else{
return cmp(left->left, right->right) && cmp(left->right, right->left);
}
}
};