描述
JZ58 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
算法
辅助函数 判断
bool isEqual(TreeNode* pRoot1, TreeNode* pRoot2);
base case
首先判断:pRoot1 和 pRoot2 都为nullptr ,则是相等, 返回true
第二步: 其中一个为nullptr, 则不相等, 返回false
返回
第三步: 结点的值是否相等 && isEqual(pRoot1左子树和pRoot2右子树) && isEqual(pRoot1右子树和pRoot2左子树)
代码
/*
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) {
//base case
return isEqual(pRoot, pRoot);
}
bool isEqual(TreeNode* pRoot1, TreeNode* pRoot2)
{
//if (pRoot1 == nullptr && pRoot2 == nullptr) return true;
if (!pRoot1 && !pRoot2) return true;
if (!pRoot1 || !pRoot2) return false;
return pRoot1->val == pRoot2->val &&
isEqual(pRoot1->left, pRoot2->right) &&
isEqual(pRoot1->right, pRoot2->left);
}
};