101 对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
树中节点数目在范围 [1, 1000] 内
-100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
思路
利用递归。(1)先比较左右节点值是否相等(红色框)(2)相等后再比较左节点的左子结点和右节点的右子节点是否相等(绿色框)(3)以及左节点的右子节点和右节点的左子结点是否相等(蓝色框)。全部相等才可返回true。
一些边界点:左右节点都为nullptr,返回true;
左右节点有一个为空,返回false。
PS:不可采用翻转后比较两棵树是否相同,因为翻转实际上改变了原始树的结构,而不是创建了一个新的镜像树。因此,当你在比较原始树和翻转树时,它们实际上是同一个树,所以会返回true。(不管啥情况都返回true)即使把原始树赋值给新的节点也没有改变指针地址,相当于是两个相同的指针地址比较。
代码
class Solution {
public:
bool isMirror(TreeNode* left, TreeNode* right) {
if (!left && !right) {
return true;
}
if (!left || !right) {
return false;
}
if (left->val != right->val) {
return false;
}
if (isMirror(left->left, right->right) &&
isMirror(left->right, right->left)) {
return true;
}
return false;
}
bool isSymmetric(TreeNode* root) {
if (!root) {
return true;
}
return isMirror(root->left, root->right);
}
};