题目:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
说明
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
算法实现
将这棵树分成左子树和右子树,然后分别前序遍历,左边先遍历左节点,右边先遍历右节点,转化成相同的两棵树问题
和BFS的区别就是BFS会消耗更多空间,当两棵树不对称的位置在内层靠上的话BFS会快点,但是如果不对称位置在底层靠外的话前序遍历会快点
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (!root) return true;
TreeNode* left = root->left;
TreeNode* right = root->right;
return Symmetry(left, right);
}
bool Symmetry(TreeNode* left, TreeNode* right) {
if (!left && !right)
return true;
else if (!left || !right)
return false;
bool match = right->val == left->val;
return (match && Symmetry(right->right, left->left)) && (match && Symmetry(right->left, left->right));
}
};