题目简介
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路
注意一个点,对称要求对应的值也是相等的。
给出对称二叉树的定义:
- 空的结点
- 没有孩子的结点
- 有两个孩子,且值相等;同时以左右孩子为根的子二叉树也是对称的
递归的代码需要传入两个值,分别是左右孩子,由此来判定是否是对称的,注意理解。
AC代码
class Solution {
public:
bool isSymmetrical (TreeNode* pRoot) {
if (pRoot == nullptr) {
return true;
}
return isSym (pRoot->left, pRoot->right);
}
bool isSym (TreeNode* rl, TreeNode* rr) {
if (rl == nullptr && rr == nullptr) {
return true;
} else if (! (rl && rr)) {
return false;
} else {
return rl->val == rr->val && \
isSym (rl->left, rr->right) && \
isSym (rl->right, rr->left);
}
}
};