题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
题目地址
思路
- 递归
- 同时遍历左子树和右子树,然后是“左子树的左子树和右子树的右子树”,及左子树的右子树和右子树的左子树,递归以上步骤
- 要解决这个题,首先要明白什么是二叉树的镜像如果不明白可以看看我的上篇博文
- 剑指offer刷题笔记——二叉树的镜像
Code
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot) {
if (pRoot == nullptr) return true;
return dfs(pRoot->left, pRoot->right);
}
bool dfs(TreeNode* l, TreeNode* r) {
if (l == nullptr && r == nullptr)
return true;
if (l == nullptr || r == nullptr) // 注意这个条件
return false;
if (l->val == r->val)
return dfs(l->left, r->right)
&& dfs(l->right, r->left);
else
return false;
}
};