题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路
递归检查左子树和右子树是否相等。
Code
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
return isSymmetricalCore(pRoot, pRoot);
}
bool isSymmetricalCore(TreeNode* pRoot1, TreeNode* pRoot2) {
if(!pRoot1 && !pRoot2) {
return true;
} else if((pRoot1 && !pRoot2) || (!pRoot1 && pRoot2)) {
return false;
} else if(pRoot1->val != pRoot2->val) {
return false;
}
return isSymmetricalCore(pRoot1->left, pRoot2->right) && isSymmetricalCore(pRoot1->right, pRoot2->left);
}
};
- java
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2) {
if(pRoot1 == null && pRoot2 == null) return true;
if(pRoot1 == null || pRoot2 == null) return false;
if(pRoot1.val != pRoot2.val) return false;
return isSymmetrical(pRoot1.left, pRoot2.right) && isSymmetrical(pRoot1.right, pRoot2.left);
}
boolean isSymmetrical(TreeNode pRoot)
{
return isSymmetrical(pRoot, pRoot);
}
}