Leetcode实战: 101. 对称二叉树

题目:

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [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));
    }
};

结果:

在这里插入图片描述

发布了154 篇原创文章 · 获赞 52 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44315987/article/details/104995612