对称的二叉树(五十八)
题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
代码(已在牛客上 AC)
- 为空树, 那么返回
true
; - 否则, 判断左右子树是否同时为空, 或同时不为空:
if (!l || !r) return l == r;
- 之后, 判断左右子树的根节点的值是否相等, 并递归判断
l->left
与r->right
是否相同, 同时l->right
与r->left
是否同时相同.
class Solution {
private:
bool isSame(TreeNode *l, TreeNode *r) {
if (!l || !r) return l == r;
return (l->val == r->val) &&
isSame(l->left, r->right) &&
isSame(l->right, r->left);
}
public:
bool isSymmetrical(TreeNode* root) {
if (!root) return true;
return isSame(root->left, root->right);
}
};