【leetcode 刷题日记】20-对称二叉树(C++)

对称二叉树

题目

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

示例

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1 / \ 2 2 \ \ 3 3

思路

什么是镜像对称的二叉树?

如果一个树的左子树与右子树镜像对称,那么这个树是对称的。

那么镜像对称的二叉树该满足什么条件?

树结点的左子树和右子树相等

这样就很容易想到递归的解法

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
 bool ismirrow(TreeNode *r1,TreeNode *r2)
{
     if(r1==NULL&&r2==NULL)
        return true;
     if(r1==NULL||r2==NULL)
        return false;
     return (r1->val==r2->val&&ismirrow(r1->left,r2->right)&&ismirrow(r1->right,r2->left));
}
class Solution {
public:
    bool isSymmetric(TreeNode* root) 
    {
       return ismirrow(root,root);  
    }
};


在这里插入图片描述

时间复杂度是O(n),即遍历所有节点

发布了34 篇原创文章 · 获赞 24 · 访问量 2003

猜你喜欢

转载自blog.csdn.net/fengshiyu1997/article/details/105000667